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

Transcript
Page 1: Προγραμματισμός σε Java

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

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

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

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

ΠΕΡΙΕΧΟΜΕΝΑ

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

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

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

ΠΕΡΙΕΧΟΜΕΝΑ

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

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

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

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

Κάποιοι από τουσ απλοφσ τφπουσ δεδομζνων (λζγονται και 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

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

ΠΕΡΙΕΧΟΜΕΝΑ

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

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

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

ΠΙΝΑΚΕ

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

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

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

ΠΙΝΑΚΕ

Παράδειγμα:

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]);

}

}

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

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

ΠΙΝΑΚΕ

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

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

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

ΠΙΝΑΚΕ

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

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

Λφςη:

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

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

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

ΠΙΝΑΚΕ

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

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

‘h’

Λφςη:

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

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

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

ΠΙΝΑΚΕ

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

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

‘h’ ‘y’

Λφςη:

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

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

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

ΠΙΝΑΚΕ

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

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

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

Λφςη:

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

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

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

ΠΙΝΑΚΕ

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

Κϊδικασ:

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. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

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

ΠΙΝΑΚΕ

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

Κϊδικασ:

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. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

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

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

ΠΙΝΑΚΕ

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

Κϊδικασ:

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

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

ΠΙΝΑΚΕ

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

Κϊδικασ:

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. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

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

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

ΠΙΝΑΚΕ

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

Κϊδικασ:

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. Αντιγράφουμε ζνα-ζνα όλα τα ςτοιχεία

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

πίνακα

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

ΠΙΝΑΚΕ

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

Κϊδικασ:

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

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

ΠΙΝΑΚΕ

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

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

Λφςη:

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

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

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

max = 24

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

ΠΙΝΑΚΕ

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

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

Λφςη:

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

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

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

max = 24

31 > 24?

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

ΠΙΝΑΚΕ

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

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

Λφςη:

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

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

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

max = 24

31 > 24? Ναι!

31

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

ΠΙΝΑΚΕ

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

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

Λφςη:

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

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

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

max =

5> 31? Όχι!

31

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

ΠΙΝΑΚΕ

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

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

Λφςη:

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

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

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

max =

52 > 31? Ναι!

31 52

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

ΠΙΝΑΚΕ

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

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

Λφςη:

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

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

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

max =

9 > 52? Όχι!

52

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

ΠΙΝΑΚΕ

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

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

Λφςη:

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

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

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

max = 52

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

ΠΙΝΑΚΕ

Πϊσ κα βροφμε το μζγιςτο (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

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

ΠΙΝΑΚΕ

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

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

ΠΕΡΙΕΧΟΜΕΝΑ

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

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

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

ΑΝΑΔΡΟΜΗ

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

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

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

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

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

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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);

}

}

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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) κα κζλαμε ςε

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

και τϊρα…

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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)

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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;

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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);

}

}

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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);

}

}

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

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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.

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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)

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

ΑΝΑΔΡΟΜΗ

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

Παράδειγμα: Βρεσ το άκροιςμα των αρικμϊν 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);

}

}

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

αναδρομι;

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

ΠΕΡΙΕΧΟΜΕΝΑ

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

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

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

STRINGS

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

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

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

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

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

STRINGS

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

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

char*+ string = “hy252”;

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

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

String str = “hy252”

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

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

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’

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

STRINGS

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

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

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

str1 =

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

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; Ναι!

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

STRINGS

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

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

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

str1 =

Λφςη:

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

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

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

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

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

STRINGS

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

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

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

str1 =

Λφςη:

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

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

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

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

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

STRINGS

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

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

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

str1 =

Λφςη:

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

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

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

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

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

STRINGS

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

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

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

str1 =

Λφςη:

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

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

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

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

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

STRINGS

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

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

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

str1 =

Λφςη:

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

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

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

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

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

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

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

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

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”

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

STRINGS

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

String str1 = “this is “;

String str2 = “a test”;

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

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

ΠΕΡΙΕΧΟΜΕΝΑ

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

Πίνακεσ

Αναδρομι

Strings

Είςοδοσ

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

ΕΙΟΔΟ

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

Από τα «command line arguments»

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

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

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

ΕΙΟΔΟ – COMMAND LINE ARGUMENTS

Command line arguments:

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

> pico

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

> pico file.txt

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

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

ΕΙΟΔΟ – COMMAND LINE ARGUMENTS

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

java MyProgram argument1 argument2 …

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

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

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

ΕΙΟΔΟ – COMMAND LINE ARGUMENTS

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

public static void main(String[] args)

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

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

ΕΙΟΔΟ – 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);

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

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

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

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

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

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: κα τα δοφμε ςτθ ςυνζχεια…)

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

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

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

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

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

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

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

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();

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