Αντικειμενοστραφής Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Ενότητα 3: Έλεγχος ροής και επαναλήψεις. Δρ. Χαράλαμπος Ζ. Πατρικάκης Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε Κάντε κλικ για να ξεκινήσετε
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς. 2
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους. 3
Ευχαριστίες Στην ανάπτυξη του υλικού βοήθησαν οι φοιτητές Λάζαρος Τουμανίδης, Λίλιαν Γούσιου και ο βοηθός εργαστηρίου Κόγιας Δημήτριος. 4
Βιβλιογραφία Harvey Deitel,Paul Deitel, «Java Προγραμματισμός, 8η έκδοση», Γκιούρδας, 2010. Γιώργος Λιακέας, «Εισαγωγή στη Java», Κλειδάριθμος, 2009. Χρήστος Κυτάγιας, Κώστας Δ. Κυτάγιας, Γιώργος Πρεζεράκος, Δημήτρης Κυτάγιας, «Αντικειμενοστραφής Προγραμματισμός με Java», Σύγχρονη Εκδοτική, 2013. Wanda Dann, Stephen Cooper, and Randy Pausch, «Learning to program with Alice» 3rd edition, Pearson Education, 2012. Michael Kölling, «Introduction to Programming with Greenfoot». «Object-Oriented Programming in Java with Games and Simulations», Pearson Education, August 2009. Οι σημειώσεις είναι βασισμένες και σε υλικό του καθηγητή του ΤΕΙ Πειραιά Γ. Πρεζεράκου. 5
Περιεχόμενα 3.1 Εντολές Ελέγχου Ροής 3.2 Βρόχοι Επαναλήψεων 6
Προσδοκώμενα Αποτελέσματα Στην ενότητα αυτή θα μάθετε για: Τις εντολές ελέγχου ροής ενός προγράμματος (if, if..else), Τις εντολές δημιουργίας βρόγχων επαναλήψεων, Την εντολή break για πρώιμη έξοδο από τέτοιον βρόγχο. 7
3.1 Εντολές Ελέγχου Ροής (Conditionals) 8
Συνθήκη if if (ΣΥΝΘΗΚΗ) { ΚΑΤΑΣΤΑΣΕΙΣ 9
Παράδειγμα public static void test(int x){ if (x > 5){ System.out.println(x + " einai > 5"); public static void main(string[] arguments){ test(6); test(5); test(4); 10
Παραστάσεις αναθέσεις - εκχωρήσεις Μία παράσταση χρησιμοποιείται για να αναπαραστήσει ένα αποτέλεσμα το οποίο προκύπτει από τον υπολογισμό της εφαρμογής τελεστών και συναρτήσεων σε μεταβλητές ή/και σταθερές Όπως και στη C, υπάρχει προτεραιότητα στην εφαρμογή τελεστών η οποία είναι η παρακάτω: Πρώτα υπολογίζονται οι παρενθέσεις (πρώτα οι εσωτερικές) από αριστερά προς τα δεξιά. Στη συνέχεια εκτελούνται οι πολλαπλασιασμοί και οι διαιρέσεις από αριστερά προς τα δεξιά. Στη συνέχεια εκτελούνται οι προσθέσεις και οι αφαιρέσεις από αριστερά προς τα δεξιά. Στο τέλος εκχωρείται η τιμή η οποία βρίσκεται δεξιά από το ίσον (=) στη μεταβλητή η οποία βρίσκεται αριστερά του. 11
Τελεστές Τελεστής Τύπος τελεστή Περιγραφή > Μεγαλύτερο >= Μεγαλύτερο ή ίσο == Τελεστές Ίσο < ισότητας/ανισότητας Μικρότερο <= Μικρότερο ή ίσο!= Διαφορετικό = Τελεστής αντιστοίχησης Ανάθεση/καταχώρηση + Πρόσθεση - Αφαίρεση * Αριθμητικοί τελεστές Πολλαπλασιασμός / Διαίρεση % Υπόλοιπο += Πρόσθεση και αντικατάσταση -= Αφαίρεση και αντικατάσταση *= Τελεστές αντικατάστασης Πολλαπλασιασμός και αντικατάσταση /= Διαίρεση και αντικατάσταση %= Υπόλοιπο και αντικατάσταση Τελεστής Τύπος τελεστή Περιγραφή && Λογικό ΚΑΙ Λογικοί τελεστές Λογικό Ή! Άρνηση ++ Τελεστές Αύξηση κατά 1 -- αυξομείωσης Μείωση κατά 1 & Ανάθεση/καταχώρηση Πρόσθεση ^ Τελεστές Αφαίρεση πράξεων με ~ bits Αντιστροφή >> Ολίσθηση δεξιά << Ολίσθηση αριστερά 12
Συνθήκη else if (ΣΥΝΘΗΚΗ) { ΚΑΤΑΣΤΑΣΕΙΣ else { ΚΑΤΑΣΤΑΣΕΙΣ 13
Παράδειγμα public static void test(int x){ if (x > 5){ System.out.println(x + " einai > 5"); else { System.out.println(x + den einai > 5 ); public static void main(string[] arguments){ test(6); test(5); test(4); 14
ELSE IF if (ΣΥΝΘΗΚΗ) { ΚΑΤΑΣΤΑΣΕΙΣ else if (ΣΥΝΘΗΚΗ) { ΚΑΤΑΣΤΑΣΕΙΣ else if (ΣΥΝΘΗΚΗ) { ΚΑΤΑΣΤΑΣΕΙΣ else { ΚΑΤΑΣΤΑΣΕΙΣ 15
Παράδειγμα public static void test(int x){ if (x > 5){ System.out.println(x + " einai > 5"); else if (x == 5) { System.out.println(x + isoutai me 5 ); else { System.out.println(x + einai < 5 ); public static void main(string[] arguments){ test(6); test(5); test(4); 16
Μετατροπή τύπου δεδομένων με μέθοδο Ακέραιος σε συμβολοσειρά: String five = 5; // ΛΑΘΟΣ! String five = Integer.toString(5); String five = + 5; // five = 5 Συμβολοσειρά σε ακέραιο: int foo = 18 // ΛΑΘΟΣ! int foo = Integer.parseInt ( 18 ); 17
Τελεστές Σύγκρισης Συμβουλή: ΜΗΝ χρησιμοποιείτε το == στους πραγματικούς! double a = Math.cos (Math.PI / 2); double b = 0.0; a = 6.123233995736766E-17 a == b επιστρέφει ΛΑΝΘΑΣΜΕΝΗ τιμή! 18
3.2 Βρόχοι Επαναλήψεων 19
Βρόχος Επανάληψης 20
Βρόχος επανάληψης static void main (String[] arguments) { System.out.println( Rule #1 ); System.out.println( Rule #2 ); System.out.println( Rule #3 ); Αν θέλουμε να το επαναλάβουμε για 200 κανόνες? 21
Βρόχος επανάληψης Οι τελεστές επανάληψης επιτρέπουν την επανάληψη μέσω ενός block του κώδικα. Υπάρχουν αρκετοί τελεστές επανάληψης στη Java (for, while, κ.ά). 22
O Τελεστής while while (συνθήκη) { εντολές 23
O Τελεστής while int i= 0; while(i < 3) { System.out.println( Rule # + i); i = i+1; Υπολογίστε προσεκτικά. Σιγουρευτείτε ότι ο βρόχος της επανάληψης έχει την ευκαιρία να τερματίσει. Αλλιώς το πρόγραμμα θα πέσει σε ατέρμονο βρόχο επανάληψης (Infinite loop). 24
Ο Τελεστής for for ( αρχικοποίηση; συνθήκη; ενημέρωση ) { εντολές 25
Ο Τελεστής for for (int i = 0; i < 3; i = i + 1 ) { System.out.println ( Rule # + i ) ; Σημείωση: Το i = i + 1 μπορεί να αντικατασταθεί από το i++. Γενικά x++ σημαίνει αύξηση της τιμής της μεταβλητής κατά ένα. 26
Kαταστάσεις Διακλάδωσης Το break τερματίζει έναν for ή while βρόχο. for ( int i = 0 ; i < 100 ; i++) { if (i==50) break; System.out.println( Rule # + i ) ; 27
Kαταστάσεις Διακλάδωσης Το break τερματίζει ένα for ή while βρόχο. for ( int i = 0 ; i < 100 ; i++) { if (i==50) break; System.out.println( Rule # + i ) ; 28
Ενσωματωμένοι βρόχοι for ( int i = 0 ; i < 3 ; i++ ) { for ( int j = 2 ; j < 4 ; j++ ) { System.out.println (i + + j ) ; Πεδίο εμβέλειας της μεταβλητής που ορίζεται στην αρχικοποίηση: το αντίστοιχο for μπλοκ μέσα στο οποίο ορίστηκαν. 29
Σε αυτή την ενότητα μιλήσαμε για: 3.1 Εντολές Ελέγχου Ροής 3.2 Βρόχοι Επαναλήψεων 30
Αντικειμενοστραφής Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Ενότητα 3: Έλεγχος ροής και επαναλήψεις. Δρ. Χαράλαμπος Ζ. Πατρικάκης Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε