Προγραμματισμός σε Java

Post on 14-Aug-2015

43 views 0 download

description

Προγραμματισμός σε Java

Transcript of Προγραμματισμός σε Java

ΠΡΟΓΡΑΜΜΑΣΙΜΟ Ε JAVAΗΤ252 – Οντοκεντρικόσ Προγραμματιςμόσ

Σμήμα Επιςτήμησ Τπολογιςτών

Πανεπιςτήμιο Κρήτησ

ΠΕΡΙΕΧΟΜΕΝΑ

Σφποι Δεδομζνων

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

ΠΕΡΙΕΧΟΜΕΝΑ

Σφποι Δεδομζνων

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

ΣΤΠΟΙ ΔΕΔΟΜΕΝΩΝ

Κάποιοι από τουσ απλοφσ τφπουσ δεδομζνων (λζγονται και primitive data types) που υποςτθρίηονται από τθν Java είναι οι παρακάτω:

int: ακζραιοσ αρικμόσ, π.χ. int i = -143;

double: δεκαδικόσ αρικμόσ, π.χ. double d = 143.8832;

char: χαρακτιρασ, π.χ. char c = ‘E’;

Άλλοι primitive τφποι δεδομζνων είναι long, boolean, float, long, short και byte.

Περιςςότερεσ πλθροφορίεσ για το κακζνα εδϊ:

http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

ΠΕΡΙΕΧΟΜΕΝΑ

Σφποι Δεδομζνων

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

ΠΙΝΑΚΕ

Ζνασ πίνακασ είναι ζνα «κουτί» που χωράει ςυγκεκριμζνο αρικμό ςτοιχείων ενόσ τφπου

Για παράδειγμα ο πίνακασ τθσ παραπάνω εικόνασ χωράει το πολφ 10 ςτοιχεία

ΠΙΝΑΚΕ

Παράδειγμα:

class ArrayDemo {

public static void main(String[] args) {

int[] anArray; // διλωςθ πίνακα ακεραίων

anArray = new int[5]; // κρατάμε χϊρο ςτθ μνιμθ για 5 ακεραίουσ

anArray[0] = 100; // αρχικοποίθςθ του πρϊτου ςτοιχείου

anArray[1] = 200; // αρχικοποίθςθ του δεφτερου ςτοιχείου

anArray[2] = 300; // κλπ.

anArray[3] = 400;

anArray[4] = 500;

System.out.println("Element at index 0: " + anArray[0]);

System.out.println("Element at index 1: " + anArray[1]);

System.out.println("Element at index 2: " + anArray[2]);

System.out.println("Element at index 3: " + anArray[3]);

System.out.println("Element at index 4: " + anArray[4]);

}

}

Σι ζξοδο κα βγάλει αυτό το πρόγραμμα;

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίγραφο του:

‘h’ ‘y’ ‘2’ ‘5’ ‘2’ Πίνακασ χαρακτιρων

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίγραφό του:

‘h’ ‘y’ ‘2’ ‘5’ ‘2’ Πίνακασ χαρακτιρων

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίγραφό του:

‘h’ ‘y’ ‘2’ ‘5’ ‘2’ Πίνακασ χαρακτιρων

‘h’

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίγραφό του:

‘h’ ‘y’ ‘2’ ‘5’ ‘2’ Πίνακασ χαρακτιρων

‘h’ ‘y’

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίγραφό του:

‘h’ ‘y’ ‘2’ ‘5’ ‘2’ Πίνακασ χαρακτιρων

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίγραφό του:

Κϊδικασ:

class ArrayDemo2{

public static void main(String[] args) {

char[] copyFrom = new char[] { ‘h', ‘y', ‘2', ‘5', ‘2'-;

char[] copyTo = new char[copyFrom.length];

for (int i = 0; i < copyFrom.length; i++) {

copyTo[i] = copyFrom[i];

}

}

}

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίτυπό του:

Κϊδικασ:

class ArrayDemo2{

public static void main(String[] args) {

char[] copyFrom = new char[] { ‘h', ‘y', ‘2', ‘5', ‘2'-;

char[] copyTo = new char[copyFrom.length];

for (int i = 0; i < copyFrom.length; i++) {

copyTo[i] = copyFrom[i];

}

}

}

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

Ο αρχικόσ πίνακασ που κζλουμε να αντιγράψουμε

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίτυπό του:

Κϊδικασ:

class ArrayDemo2{

public static void main(String[] args) {

char[] copyFrom = new char*+ , ‘h', ‘y', ‘2', ‘5', ‘2'-;

char[] copyTo = new char[copyFrom.length];

for (int i = 0; i < copyFrom.length; i++) {

copyTo[i] = copyFrom[i];

}

}

}

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

Ζτςι μποροφμε να πάρουμε το μζγεκοσ ενόσ πίνακα. Εδϊ το

μζγεκοσ του copyFrom είναι 5

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίτυπό του:

Κϊδικασ:

class ArrayDemo2{

public static void main(String[] args) {

char[] copyFrom = new char*+ , ‘h', ‘y', ‘2', ‘5', ‘2'-;

char[] copyTo = new char[copyFrom.length];

for (int i = 0; i < copyFrom.length; i++) {

copyTo[i] = copyFrom[i];

}

}

}

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

Δθλϊνουμε και αρχικοποιοφμε τον νζο πίνακα

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίτυπό του:

Κϊδικασ:

class ArrayDemo2{

public static void main(String[] args) {

char[] copyFrom = , ‘h', ‘y', ‘2', ‘5', ‘2'-;

char[] copyTo = new char[copyFrom.length];

for (int i = 0; i < copyFrom.length; i++) {

copyTo[i] = copyFrom[i];

}

}

}

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

Μία επανάλθψθ που κα εκτελεςτεί τόςεσ φορζσ όςεσ το μζγεκοσ του

πίνακα

ΠΙΝΑΚΕ

Παράδειγμα: ζχεισ ζναν πίνακα χαρακτιρων και κζλεισ να δθμιουργιςεισ ζνα αντίτυπό του:

Κϊδικασ:

class ArrayDemo2{

public static void main(String[] args) {

char[] copyFrom = , ‘h', ‘y', ‘2', ‘5', ‘2'-;

char[] copyTo = new char[copyFrom.length];

for (int i = 0; i < copyFrom.length; i++) {

copyTo[i] = copyFrom[i];

}

}

}

Λφςη:

1. Δθλϊνουμε ζναν καινοφριο πίνακα ίςου μεγζκουσ με τον αρχικό,

2. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

Εδϊ αντιγράφει το ςτοιχείο i του πίνακα copyFrom ςτον copyTo

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (max) ενόσ πίνακαακεραίων;

24 31 5 52 9 Πίνακασ ακεραίων

Λφςη:

1. Τποκζτουμε ότι ζνα οποιοδιποτε ςτοιχείο (πχ το πρϊτο) είναι το max,

2. Διατρζχουμε όλο τον πίνακα και για κάκε ζνα ςτοιχείο του ελζγχουμε αν είναι μεγαλφτερο από το max

3. Αν είναι, κεωροφμε αυτό ςαν max

max = 24

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (max) ενόσ πίνακαακεραίων;

24 31 5 52 9 Πίνακασ ακεραίων

Λφςη:

1. Τποκζτουμε ότι ζνα οποιοδιποτε ςτοιχείο (πχ το πρϊτο) είναι το max,

2. Διατρζχουμε όλο τον πίνακα και για κάκε ζνα ςτοιχείο του ελζγχουμε αν είναι μεγαλφτερο από το max

3. Αν είναι, κεωροφμε αυτό ςαν max

max = 24

31 > 24?

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (max) ενόσ πίνακαακεραίων;

24 31 5 52 9 Πίνακασ ακεραίων

Λφςη:

1. Τποκζτουμε ότι ζνα οποιοδιποτε ςτοιχείο (πχ το πρϊτο) είναι το max,

2. Διατρζχουμε όλο τον πίνακα και για κάκε ζνα ςτοιχείο του ελζγχουμε αν είναι μεγαλφτερο από το max

3. Αν είναι, κεωροφμε αυτό ςαν max

max = 24

31 > 24? Ναι!

31

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (max) ενόσ πίνακαακεραίων;

24 31 5 52 9 Πίνακασ ακεραίων

Λφςη:

1. Τποκζτουμε ότι ζνα οποιοδιποτε ςτοιχείο (πχ το πρϊτο) είναι το max,

2. Διατρζχουμε όλο τον πίνακα και για κάκε ζνα ςτοιχείο του ελζγχουμε αν είναι μεγαλφτερο από το max

3. Αν είναι, κεωροφμε αυτό ςαν max

max =

5> 31? Όχι!

31

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (max) ενόσ πίνακαακεραίων;

24 31 5 52 9 Πίνακασ ακεραίων

Λφςη:

1. Τποκζτουμε ότι ζνα οποιοδιποτε ςτοιχείο (πχ το πρϊτο) είναι το max,

2. Διατρζχουμε όλο τον πίνακα και για κάκε ζνα ςτοιχείο του ελζγχουμε αν είναι μεγαλφτερο από το max

3. Αν είναι, κεωροφμε αυτό ςαν max

max =

52 > 31? Ναι!

31 52

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (max) ενόσ πίνακαακεραίων;

24 31 5 52 9 Πίνακασ ακεραίων

Λφςη:

1. Τποκζτουμε ότι ζνα οποιοδιποτε ςτοιχείο (πχ το πρϊτο) είναι το max,

2. Διατρζχουμε όλο τον πίνακα και για κάκε ζνα ςτοιχείο του ελζγχουμε αν είναι μεγαλφτερο από το max

3. Αν είναι, κεωροφμε αυτό ςαν max

max =

9 > 52? Όχι!

52

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (max) ενόσ πίνακαακεραίων;

24 31 5 52 9 Πίνακασ ακεραίων

Λφςη:

1. Τποκζτουμε ότι ζνα οποιοδιποτε ςτοιχείο (πχ το πρϊτο) είναι το max,

2. Διατρζχουμε όλο τον πίνακα και για κάκε ζνα ςτοιχείο του ελζγχουμε αν είναι μεγαλφτερο από το max

3. Αν είναι, κεωροφμε αυτό ςαν max

max = 52

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (max) ενόσ πίνακαακεραίων;

Κϊδικασ:class ArrayDemo3 {

public static void main(String[] args) {

int[] array= { 24, 31, 5, 52, 9};

int max = array[0];

for (int i = 0; i < array.length; i++) {

if (array[i] > max) {

max = array[i];

}

}

}

}

Λφςη:

1. Τποκζτουμε ότι ζνα οποιοδιποτε ςτοιχείο (πχ το πρϊτο) είναι το max,

2. Διατρζχουμε όλο τον πίνακα και για κάκε ζνα ςτοιχείο του ελζγχουμε αν είναι μεγαλφτερο από το max

3. Αν είναι, κεωροφμε αυτό ςαν max

ΠΙΝΑΚΕ

Κάνε το ίδιο για να βρεισ το ελάχιςτο (min) ενόσ πίνακα και το άκροιςμα των ςτοιχείων του πίνακα (sum)

ΠΕΡΙΕΧΟΜΕΝΑ

Σφποι Δεδομζνων

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Κάκε αναδρομικι μζκοδοσ ζχει κάποια ςυνκικθ τζλουσ και κάποιο βιμα

Η ςυνκικθ τζλουσ είναι ςυνικωσ μία ακραία τιμι ςτισ μεταβλθτζσ

το βιμα (ι επαγωγικό βιμα) θ μζκοδοσ ξανακαλεί τον εαυτό τθσ με διαφορετικζσ παραμζτρουσ

Κάκε αναδρομι είναι διαφορετικι και δεν υπάρχει γενικόσ κανόνασ για το πϊσ μπορείσ να βρεισ το επαγωγικό βιμα ι τθ ςυνκικθ τζλουσ

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

Ποιο θα μποροφςε να είναι το βήμα;Αν ιταν επανάλθψθ (for/while) κα κζλαμε ςε

κάκε βιμα να προςκζτει ακόμα ζναν από τουσ αρικμοφσ ςτο ςφνολο. Αυτό κα κάνουμε

και τϊρα…

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

Ποιο θα μποροφςε να είναι το βήμα;…

Σο άκροιςμα των αρικμϊν (n1…n2) είναι ίςο με το άκροιςμα n1 + ((n1+1)…n2)

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

Ποια είναι η ςυνθήκη τέλουσ;Μία ακραία τιμι είναι το n1=n2. Σι γίνεται

όταν n1=n2;

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

υνκικθ τζλουσ

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

Π.χ. αν καλζςει κάποιοσ“sum(7, 7)” το αποτζλεςμα

πρζπει να είναι 7.

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

Π.χ. αν καλζςει κάποιοσ“sum(3, 7)” το αποτζλεςμα

μποροφμε να ποφμε ότι είναι 3 + sum(4, 7)

ΑΝΑΔΡΟΜΗ

Μια αναδρομικι μζκοδοσ είναι μία μζκοδοσ που καλεί τον εαυτό τθσ

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν n1…n2. Π.χ. για n1 = 3 και n2 = 7, το άκροιςμα είναι 3 + 4 +… + 7 = 25

public static int sum(int n1, int n2) {

if (n1 == n2) {

return n1;

} else {

return n1 + sum(n1 + 1, n2);

}

}

Άςκηςη: Πϊσ κα ζλυνεσ τθν ίδια άςκθςθ χωρίσ

αναδρομι;

ΠΕΡΙΕΧΟΜΕΝΑ

Σφποι Δεδομζνων

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

STRINGS

Ζνα string ι ςυμβολοςειρά μπορεί να είναι μία λζξθ (π.χ. “java”) ι ζνα οποιοδιποτε άλλο κείμενο (π.χ. “προγραμματιςμόσ ςε java”)

τα primitive types που είδαμε ςτθν αρχι δεν υπάρχει μεταβλθτι τφπου string…

Τπάρχει όμωσ μεταβλθτι τφπου χαρακτιρα: char c = ‘j’;

Πϊσ κα μποροφςεσ να δθμιουργιςεισ strings αν είχεσ μόνο char μεταβλθτζσ;

STRINGS

Πϊσ κα μποροφςεσ να δθμιουργιςεισ strings αν είχεσ μόνο char μεταβλθτζσ;

Με πίνακεσ από char!

char*+ string = “hy252”;

Κάτι τζτοιο κα χρειαηόταν να κάνουμε ςε μία γλϊςςα προγραμματιςμοφ όπωσ θ C

τθ Java υπάρχει θ κλάςθ Strings:

String str = “hy252”

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

STRINGS

Μπορείσ όμωσ και πάλι να ςκζφτεςαι ότι ζνα Stringείναι ζνασ πίνακασ χαρακτιρων

Για να πάρεισ τον χαρακτιρα ςτθ κζςθ i γράφεισ:

str.get(i)

Π.χ.

String str1 = “kostas”;

String str2 = “java”;

char c1 = str1.get(5); // εδϊ c1 = ‘s’

char c2 = str2.get(0); // εδϊ c2 = ‘j’

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

STRINGS

Παράδειγμα: Γράψτε μία μζκοδο που να ςυγκρίνει αν δφο String είναι ίςα

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

‘h’ ‘y’ ‘2’ ‘4’ ‘0’str2 =

str1 =

STRINGS

Παράδειγμα: Γράψτε μία μζκοδο που να ςυγκρίνει αν δφο String είναι ίςα

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

‘h’ ‘y’ ‘2’ ‘4’ ‘0’str2 =

str1 =

Λφςη:

1. Ελζγχουμε αν το μζγεκοσ των δφο strings είναι ίςο (αν δεν είναι τότε ςίγουρα δεν είναι ίςα!)

2. υγκρίνουμε ζναν-ζνα όλουσ τουσ χαρακτιρεσ για να δοφμε αν είναι ίςοι

3. Αν τουλάχιςτον ςε μία κζςθ οι χαρακτιρεσ δεν είναι ίςοι επιςτρζφουμε false

ℓ1

ℓ2

ℓ1 = 5ℓ2 = 5ℓ1 == ℓ2; Ναι!

STRINGS

Παράδειγμα: Γράψτε μία μζκοδο που να ςυγκρίνει αν δφο String είναι ίςα

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

‘h’ ‘y’ ‘2’ ‘4’ ‘0’str2 =

str1 =

Λφςη:

1. Ελζγχουμε αν το μζγεκοσ των δφο strings είναι ίςο (αν δεν είναι τότε ςίγουρα δεν είναι ίςα!)

2. υγκρίνουμε ζναν-ζνα όλουσ τουσ χαρακτιρεσ για να δοφμε αν είναι ίςοι

3. Αν τουλάχιςτον ςε μία κζςθ οι χαρακτιρεσ δεν είναι ίςοι επιςτρζφουμε false

‘h’ == ‘h’; Ναι!

STRINGS

Παράδειγμα: Γράψτε μία μζκοδο που να ςυγκρίνει αν δφο String είναι ίςα

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

‘h’ ‘y’ ‘2’ ‘4’ ‘0’str2 =

str1 =

Λφςη:

1. Ελζγχουμε αν το μζγεκοσ των δφο strings είναι ίςο (αν δεν είναι τότε ςίγουρα δεν είναι ίςα!)

2. υγκρίνουμε ζναν-ζνα όλουσ τουσ χαρακτιρεσ για να δοφμε αν είναι ίςοι

3. Αν τουλάχιςτον ςε μία κζςθ οι χαρακτιρεσ δεν είναι ίςοι επιςτρζφουμε false

‘y’ == ‘y’; Ναι!

STRINGS

Παράδειγμα: Γράψτε μία μζκοδο που να ςυγκρίνει αν δφο String είναι ίςα

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

‘h’ ‘y’ ‘2’ ‘4’ ‘0’str2 =

str1 =

Λφςη:

1. Ελζγχουμε αν το μζγεκοσ των δφο strings είναι ίςο (αν δεν είναι τότε ςίγουρα δεν είναι ίςα!)

2. υγκρίνουμε ζναν-ζνα όλουσ τουσ χαρακτιρεσ για να δοφμε αν είναι ίςοι

3. Αν τουλάχιςτον ςε μία κζςθ οι χαρακτιρεσ δεν είναι ίςοι επιςτρζφουμε false

‘2’ == ‘2’; Ναι!

STRINGS

Παράδειγμα: Γράψτε μία μζκοδο που να ςυγκρίνει αν δφο String είναι ίςα

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

‘h’ ‘y’ ‘2’ ‘4’ ‘0’str2 =

str1 =

Λφςη:

1. Ελζγχουμε αν το μζγεκοσ των δφο strings είναι ίςο (αν δεν είναι τότε ςίγουρα δεν είναι ίςα!)

2. υγκρίνουμε ζναν-ζνα όλουσ τουσ χαρακτιρεσ για να δοφμε αν είναι ίςοι

3. Αν τουλάχιςτον ςε μία κζςθ οι χαρακτιρεσ δεν είναι ίςοι επιςτρζφουμε false

‘5’ == ‘4’; Όχι!

STRINGS

Παράδειγμα: Γράψτε μία μζκοδο που να ςυγκρίνει αν δφο String είναι ίςα

‘h’ ‘y’ ‘2’ ‘5’ ‘2’

‘h’ ‘y’ ‘2’ ‘4’ ‘0’str2 =

str1 =

Λφςη:

1. Ελζγχουμε αν το μζγεκοσ των δφο strings είναι ίςο (αν δεν είναι τότε ςίγουρα δεν είναι ίςα!)

2. υγκρίνουμε ζναν-ζνα όλουσ τουσ χαρακτιρεσ για να δοφμε αν είναι ίςοι

3. Αν τουλάχιςτον ςε μία κζςθ οι χαρακτιρεσ δεν είναι ίςοι επιςτρζφουμε false

‘5’ == ‘4’; Όχι!

Εδϊ μπορεί να ςταματιςει θ επανάλθψθ: αν τουλάχιςτον ςε μία κζςθ οι χαρακτιρεσ δεν είναι ίςοι τα δφο strings δεν είναι ίςα

STRINGS

Παράδειγμα: Γράψτε μία μζκοδο που να ςυγκρίνει αν δφο String είναι ίςα

Κϊδικασ:public static boolean stringEqual(String str1, String str2) {

int l1 = str1.size();int l2 = str2.size();if (l1 != l2) {

return false;}for (int i = 0; i < l1; i++) {

if (str1.get(i) != str2.get(i)) {return false;

}}

}

Λφςη:

1. Ελζγχουμε αν το μζγεκοσ των δφο strings είναι ίςο (αν δεν είναι τότε ςίγουρα δεν είναι ίςα!)

2. υγκρίνουμε ζναν-ζνα όλουσ τουσ χαρακτιρεσ για να δοφμε αν είναι ίςοι

3. Αν τουλάχιςτον ςε μία κζςθ οι χαρακτιρεσ δεν είναι ίςοι επιςτρζφουμε false

STRINGS

Η κλάςθ String μασ δίνει πολλζσ δυνατότθτεσ χειριςμοφ ςυμβολοςειρϊν.

Π.χ. μπορεί κανείσ να αποφφγει να γράψει κϊδικα για ελζγξει αν δφο strings είναι ίςα:

boolean result = str1.equals(str2);

H μζκοδοσ equals τθσ κλάςθσ String επιςτρζφει true αν τα δφο strings είναι ίςα ι false αν όχι

Μία άλλθ χριςιμθ μζκοδοσ είναι θ:

public String[] split(String regex)

Π.χ. String str1 = “this is a test”;

String*+ result = str1.split(“ “);

“this”

“is”

“a”

“test”

STRINGS

Μία άλλθ χριςιμθ λειτουργία είναι θ «ζνωςθ» δφοstrings. Για να το κάνεισ αυτό αρκεί να γράψεισ το παρακάτω:

String str1 = “this is “;

String str2 = “a test”;

String enwsi = str1 + str2; “this is a test”

ΠΕΡΙΕΧΟΜΕΝΑ

Σφποι Δεδομζνων

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

ΕΙΟΔΟ

Για να πάρεισ είςοδο από τον χριςτθ υπάρχουν 3 τρόποι:

Από τα «command line arguments»

Από τθν κονςόλα

Από κάποιο αρχείο

ΕΙΟΔΟ – COMMAND LINE ARGUMENTS

Command line arguments:

Για να εκτελζςεισ το “pico” γράφεισ:

> pico

Αν όμωσ κζλεισ να ανοίξεισ με το pico ζνα αρχείο γράφεισ:

> pico file.txt

τθ δεφτερθ γραμμι, το pico είναι το όνομα του εκτελζςιμου και το file.txt είναι ζνα command line argument

ΕΙΟΔΟ – COMMAND LINE ARGUMENTS

τθ java αντίςτοιχα, όταν κζλεισ να περάςεισ command line arguments ςε ζνα πρόγραμμά ςου γράφεισ:

java MyProgram argument1 argument2 …

Σϊρα το MyProgram είναι το όνομα του εκτελζςιμου και το argument1 είναι το πρϊτο argument, το argumnet2 το δεφτερο κλπ.

Σα arguments αυτά, τα δίνει ο χριςτθσ που χρθςιμοποιεί το πρόγραμμα, και όχι ο προγραμματιςτισ που ζγραψε τον κϊδικα

ΕΙΟΔΟ – COMMAND LINE ARGUMENTS

Σϊρα, για να ξζρει το πρόγραμμα ςου (και εςφ ωσ προγραμματιςτισ) τι arguments ζδωςε ο κάκε χριςτθσ, αυτά τα ζχεισ από τθν παράμετρο String[] args ςτθ main του προγράμματόσ ςου:

public static void main(String[] args)

Σθν μεταβλθτι αυτι μπορείσ να τθ χειριςτείσ όπωσ οποιαδιποτε μεταβλθτι του προγράμματόσ ςου

ΕΙΟΔΟ – COMMAND LINE ARGUMENTS

Παράδειγμα:

public static void main(String[] args) {

String result = “”;

for (int i = 0; i < args.length; i++) {

result = result + “ “ + args[i];

}

System.out.println(result);

}Άςκηςη: Σι εκτυπϊνει αυτό

το πρόγραμμα;

ΕΙΟΔΟ – ΑΠΟ ΚΟΝΟΛΑ

Για να διαβάςεισ μία γραμμι από κονςόλα γράφεισ τον παρακάτω κϊδικα:

Scanner in = new Scanner(System.in);

String line = in.nextLine();

H κλάςθ Scanner ςου δίνει τι δυνατότθτα να διαβάςεισ λζξεισ, ακεραίουσ, δεκαδικοφσ, γραμμζσ κλπ.

Π.χ.

Scanner in = new Scanner(System.in);

String line = in.nextLine();

int akeraios = in.nextInt();

double dekadikos = in.nextDouble();

Εδϊ κα περιμζνει να διαβάςει από τθν κονςόλα αρχικά μια γραμμι, μετά ζναν ακζραιο και μετά ζναν

δεκαδικό. Αν ο χριςτθσ δϊςει κάτι διαφορετικό από τθν αναμενόμενθ είςοδο το πρόγραμμα κα πετάξει

λάκοσ (Exception: κα τα δοφμε ςτθ ςυνζχεια…)

ΕΙΟΔΟ – ΑΠΟ ΑΡΧΕΙΟ

Η είςοδοσ από αρχείο είναι ςχεδόν ίδια με το να διαβάηεισ από κονςόλα.

Σο μόνο που αλλάηει είναι θ παράμετροσ που κα δϊςεισ ςτθν αρχικοποίθςθ τθσ Scanner:

Scanner in = new Scanner(new File(“file.txt”);

ΕΙΟΔΟ – ΑΠΟ ΑΡΧΕΙΟ

Scanner in = new Scanner(new File(“file.txt”);

Δθλαδι, πλζον, αντί να γράφεισ μζςα System.in, γράφεισ “new File(“filename”)”. Δθλαδι, δίνεισ το όνομα του αρχείου που κεσ να διαβάςεισ

τθ ςυνζχεια κάνεισ ακριβϊσ ότι και πριν:

Scanner in = new Scanner(new File(“file.txt”);

String line = in.nextLine();

int akeraios = in.nextInt();

double dekadikos = in.nextDouble();