ΣΕΜΙΝΑΡΙΟ JAVA 2 η ιάλεξη
ΕΙΣΑΓΩΓΙΚΑ ΓΙΑ ΤΗ ΟΜΗ ΤΗΣ JAVA Πίνακες Κείµενα Έλεγχος ροής ρογράµµατος if/elseif/else while for & foreach switch break / continue / return
ΠΙΝΑΚΕΣ Αγκύλες Χρησιµο οιούνται α οκλειστικά για ίνακες Μέγεθος Ορίζεται, όχι µόνο στη δήλωση ήλωση Τύ ος δεδοµένων Όνοµα Προαιρετικά διάσταση Αναφορά σε στοιχείο Α ό 0 ως Μήκος -1 Αντικείµενο Μήκος ίνακα Κλάσση Arrays ιαγραφή Μέσω ανάθεσης µε null Περισσότερες διαστάσεις : Ως ίνακες ινάκων int[] pinakas1 = new int[10]; int pinakas2[]; pinakas2 = new int[100]; pinakas1[5] = pinakas2[12]; pinakas1[8]++; int L = pinakas1.length; Arrays.sort(pinakas2); pinakas1 = null; MyClass[][] a = new MyClass[3][3];
ΠΙΝΑΚΕΣ ΥΟ ΙΑΣΤΑΣΕΩΝ int[][] a = new int[4][8]; a.length δίνει 4 a[0].length δίνει 8 a a[0] a[1] a[n-2] a[n-1]
ΚΕΙΜΕΝΟ STRING & CHARACTER Το κείµενο στη Java αριστάνεται σαν αντικείµενο κλάσης String Α οτελείται α ό χαρακτήρες (κλάση Character) Ε ίσης γράφονται ως κείµενο µέσα σε δι λά εισαγωγικά και αντιστοιχούν σε αντικείµενο String Ειδικοί χαρακτήρες µέσα στα δι λά εισαγωγικά, ξεκινάνε άντα µε \ και ακολουθεί το: n για αλλαγή γραµµής \ για το ίδιο το \ t για τον tab (στηλοθέτης) r για ε ιστροφή στην αρχή της γραµµής Ένας χαρακτήρας σε µονά εισαγωγικά αντιστοιχεί σε αντικείµενο Character. Ειδική συµ εριφορά τελεστών όταν εµ λέκεται String: Το + ενώνει το String µε άλλο String ή αν δεν είναι String το άλλο εµ λεκόµενο στοιχείο, ροσ αθεί να το µετατρέψει Το == ελέγχει τα αντικείµενα αν ταυτίζονται και όχι το εριεχόµενο String, άρα µ ορεί δύο αντικείµενα να έχουν το ίδιο κείµενο και το == να δώσει ψευδές στη σύγκριση! Το σωστό είναι το astring.equals(anotherstring)
ΠΑΡΑ ΕΙΓΜΑΤΑ STRING Η εκτέλεση της παρακάτω µεθόδου: ίνει το ακόλουθο αποτέλεσµα: public static void stringtest() { int[] x = new int[] {1,3,5,7,9,2,4,6,8,0; System.out.println("a" + "b"); System.out.println("1" + 2); System.out.println(1 + "2"); System.out.println(1 + 2 + "3"); System.out.println("1" + 2 + 3); System.out.println("A! " + (1+1==2)); System.out.println("" + x); System.out.println(x.toString()); System.out.println(Arrays.toString(x)); ab 12 12 33 123 A! true [I@42e816 [I@42e816 [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 1/ if ή if / elseήif / else if / / else if / else Κάθε if ελέγχει µια συνθήκη η ο οία είναι υ οχρεωτικά µέσα σε αρενθέσεις Για το if ου ε αληθεύεται εκτελούνται οι αντίστοιχες εντολές Το if είναι υ οχρεωτικό και µόνο ένα Το else είναι ροεραιτικό, αλλά το ολύ ένα Τα else if είναι ροαιρετικά και α εριόριστα Η σειρά των συνθηκών ου εξετάζοναι είναι άντα α ό τη ειδική στην γενική Πάντα µε { αν και για 1 εντολή δεν α αιτούνται
ΠΑΡΑ ΕΙΓΜΑΤΑ IF 1/ //====================== Ex. #1 if (x < 0) { println("can't calc root! ); else { println("root is : " + Math.sqrt(x) ); //====================== Ex. #2 if (year % 400 == 0) { // ίσεκτο else if (year % 100 == 0) { // Μη δίσεκτο else if (year % 4 == 0) { // ίσεκτο else { // Μη δίσεκτο //====================== Ex. #3 if (year % 4 == 0) { if (year % 100 == 0) { if (year % 400 == 0) { // ίσεκτο else { else { else { // Μη δίσεκτο // ίσεκτο // Μη δίσεκτο
ΠΑΡΑ ΕΙΓΜΑΤΑ IF 2/ //====================== Ex. #4 if (kilos > 0) { // Do something else if (kilos == 0) { // Do Something more else { // Oops! This couldn t happen! // IT S A BUG!! //====================== Ex. #5 if (x == 0) { // Do this it s ok! // But it s a little bit // Looooong // Too many lines // So you see it s not that easy // to tell where it ends return; //====================== Ex. #6 if (x!= 0) return; // The same long // series of commands // but now you don t care // where the if ends // It works the other way around // You negate the condition to // end the execution, instead // of executing when all the // conditions are met! return;
ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 2/ while Σύνταξη ίδια µε το α λό if όµως οι εντολές του σώµατος ε αναλαµβάνονται εφόσον εξακολοθεί και ισχύει η συνθήκη. Εάν αρχικά η συνθήκη δεν ισχύει, τότε δεν εκτελείται καθόλου το σώµα. Προσοχή ώστε η συνθήκη κά οια στιγµή να µην ε αληθεύεται αλλιώς το σώµα θα εκτελείται συνεχώς. do / while Ίδιο µε το while, εκτελείται όµως ρώτα το σώµα του βρόχου και µετά ελέγχεται η συνθήκη. Γίνεται άντα τουλάχιστον µία ε ανάληψη.
ΠΑΡΑ ΕΙΓΜΑΤΑ WHILE //======================== Ex. #1 while (x > 1) { x = x / 2; //======================== Ex. #2 while (x > 1) { x *= 2; // Λάθος! Το x αυξάνει!! // Ατέρµονας βρόχος //======================== Ex. #4 do { a++; b = testone(a); c = b + testtwo(a, x); while (x!= 0) ; // Πρόβληµα, γιατί το x δεν αλλάζει // µέσα στο σώµα του βρόχου, άρα // Αν ισχύει η συνθήκη έστω και µία // φορά, τότε ο βρόχος θα εκτελείται // «για πάντα» //======================== Ex. #3 while (0 < 1) { // Ατέρµονας βρόχος // Εκτελείται «για πάντα» //======================== Ex. #5 while ((x = R.nextInt()) > 50) { // Ειδική γραφή, εκτελείται η // εκχώριση στο x και µετά // γίνεται ο έλεγχος // Do something
ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 3/ Α λό for 1 2 3 for (int i = 0; i < 5; i++) { 4 System.out.println("Iteration / Επανάληψη #" + i); Αντιστοίχιση του σχήµατος 1 : Α όδοση αρχικών τιµών 2 : Έλεγχος ου ρέ ει να ισχύει 3 : Μεταβολή σε κάθε βήµα της ε ανάληψης 4 : «Σώµα» του βρόχου Η σειρά εκτέλεσης είναι: Βήµα 1: Μια φορά στην αρχή 1, 2 Βήµα 2: Εφόσον ισχύει το 2, τότε εκτελούνται 4, 3, 2 και ε αναλαµβάνεται µόνο αυτό το βήµα (#2)
ΠΑΡΑ ΕΙΓΜΑΤΑ FOR //======================== Ex. #1 for (int i=1; i<n; i++) { println("hello! ); //======================== Ex. #2 for (int i=1; i<n; i++) { println(" ("i = " + i); //======================== Ex. #3 for (int i=1; i<pinak.length; i++) { println(" ("pinak[" + i + "] = " + pinak[i]); //======================== Ex. #4 for (int i=1; i<n; i++) { if (i % 5) continue; println(" ("i = " + i); //======================== Ex. #5 for (int i=1; i<n; i++) { x = f(i); if (x < 12) y = g(x);
Η ΛΕΙΤΟΥΡΓΙΑ ΤΩΝ ΑΓΚΙΣΡΩΝ { (BRACES Ή CURLY BRACKETS) Οµαδο οιούν τις εντολές ου εριέχονται ανάµεσα τους σαν µία. Σε αυτή την ερί τωση: Οι µεταβλητές ου ορίζονται µέσα στα άγκιστρα σταµατούν να «υ άρχουν» έξω α ό αυτά Οµαδο οιούν εντολές για χρήση µε τα if-elseif-else, while, for, κλ Οριοθετούν: Κλάσεις Μεθόδους Αρχικο οιούν ίνακες int[ ] a = new int [ ] { 1, 2, 3, 4, 5, 8, 8, 8 ;
ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 4/ Εναλλακτικές switch / case Χρήση όταν έχουµε ακέραιους και enum, µ ορεί να αντικαταστήσει το ολλα λό else if. εν µ ορεί να το αντικαταστήσει λήρως. Χρησιµο οιεί µόνο ροκαθορισµένες τιµές Κάθε «ερί τωση» ρέ ει να τερµατίζεται οριστικά (break) αλλιώς συνεχίζεταιη εκτέλεση και στις άλλες ερι τώσεις. Ορίζεται ροαιρετκά και µία catch-all ερί τωση για ότι δεν εµ ί τει στις συγκεκριµένες ερι τώσεις. for... each Εφαρµόζεται σε σύνολα / ίνακες / κλ Ε αναλαµβάνει τη διαδικασία για κάθε τιµή του «συνόλου» εν υ άρχει εγγύηση για τη σειρά ου λαµβάνονται τα στοιχεία α ό το σύνολο Προσοχή δεν µ ορείτε να τη χρησιµο οιήσετε όταν: Πρέ ει να µεταβάλετε κά οιο α ό τα στοιχεία του συνόλου Θέλετε να «διατρέξετε» δύο ίνακες «αράλληλα» Μόνο ρος τα εµ ρός ε ανάληψη και µε βήµα 1.
ΠΑΡΑ ΕΙΓΜΑΤΑ SWITCH / FOR EACH //======================== Ex. #1 int x = Math.round(8*(float) (8*(float)Math.random()); switch(x) { case 1: System.out.println("One"); case 2: System.out.println("Two"); case 3: case 4: case 5: System.out.print( Too "); System.out.println("Low"); default: System.out.println("High"); //================ Ex. #1 int[] i = new int[] { 1,3,5,7,9,2,4,6,8 ; for (int j : i) { System.out.println //================ Ex. #2 ("Pare ena ari8mo: " + j); String s = "Kalo paradeigma?"; for (char c : s.tochararray()) { System.out.println(c);
ΕΛΕΓΧΟΣ ΡΟΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ 5/ Περισσότερες δυνατότητες break Σε βρόχο (while, do/while, for) Τερµατίζει την εκτέλεση του βρόχου στον ο οίο βρίσκεται Για βρόχους ο ένας µέσα στον άλλο αφορά µόνο αυτόν στον ο οίο βρίσκεται το break Σε switch Τερµατίζει το switch Σε switch µέσα σε βρόχο ή το αντίστροφο, τερµατίζει ότι το εριέχει continue Σε βρόχο Τερµατίζει την τρέχουσα ε ανάληψη, όχι τον βρόχο Χρησιµο οιούνται ε ειδή: Κάνουν το ρόγραµµα ιο ευανάγνωστο Α λο οιούν τον κώδικα σε ολλές ερι τώσεις Α οτελούν µοναδική λύση σε ιο σύγχρονες δοµές κώδικα return Τερµατίζει κά οια µέθοδο (υ ορουτίνα ή συνάρτηση) Παρέχει την ε ιστρεφόµενη τιµή (α οτέλεσµα) της συνάρτησης
ΠΑΡΑ ΕΙΓΜΑΤΑ BREAK / CONTINUE //======================== Ex. #1 while (a < 0) { x += a; y = f(x); if (y == a) continue; z = g(x, y); //======================== Ex. #2 for (int i=0; i<n; i++) { x = f(x); y = g(x); if (y < eps) //======================== Ex. #3 for (String s : stringset) { if (s.equals("hello")) //================ Ex. #4 for (int i=0; i<n; i++) { x = f(i) if (x == A) switch (i) { case 1: // Do something case 2: // Do something else default: // Do the rest
ΛΕΞΙΛΟΓΙΟ Αγγλικά Ελληνικά Ε εξήγηση invoke reference primitive (data) type καλώ µέθοδο ή συνάρτηση αναφορά ρωτογεννής τύ ος (δεδοµένων) declaration δήλωση ήλωση µεθόδου, δηλαδή καθορίζονται οι αράµετροι και το α οτέλεσµα µιας συνάρτησης, δεν υ άρχει κώδικας definition ορισµός Ό ως η δήλωση αλλά εριλαµβάνεται και ο κώδικας operator τελεστής Το σύµβολο της ράξης. Μοναδιαίος, δυαδικός, τριαδικός. initialization αρχικο οίηση Α όδοση αρχικής τιµής σε µεταβλητές method µέθοδος Υ ορουτίνα ή συνάρτηση ου σχετίζεται µε (ανήκει σε) ένα αντικείµενο