Αντικειμενοστρεφής Προγραμματισμός

Σχετικά έγγραφα
Αντικειμενοστρεφής Προγραμματισμός

Αριθμητικοί υπολογισμοί χρησιμοποιούνται σε όλα σχεδόν τα προγράμματα

7. Δομές Ελέγχου (Control Statements)

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Εισαγωγή στον Προγραμματισμό

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

4. Εισαγωγή στη Java

5. Ανασκόπηση αντικειμενοστραφούς προγραμματισμού

ΠΛΗΡΟΦΟΡΙΚΗ ΙΙ (JAVA) 11/3/2008

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Υπολογισμός - Εντολές Επανάληψης

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Δήλωση ακέραιων μεταβλητών. ροής με την στάνταρ είσοδο

Αντικειμενοστρεφής Προγραμματισμός Διάλεξη 2 : ΜΕΤΑΒΛΗΤΕΣ ΤΕΛΕΣΤΕΣ & ΕΚΦΡΑΣΕΙΣ ΕΛΕΓΧΟΣ ΡΟΗΣ

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

ΠΛΗΡΟΦΟΡΙΚΗ ΙI Ενότητα 3: Έλεγχος ροής προγράμματος

Αντικειμενοστρεφής Προγραμματισμός

Αντικειμενοστρεφής Προγραμματισμός

Στόχοι και αντικείμενο ενότητας. Προτάσεις επανάληψης. Έλεγχος ροής προγράμματος. #5.. Εντολές Επανάληψης

3. Εκφράσεις και έλεγχος ροής

Πίνακες στη Java. Αντικειμενοστρεφής Προγραμματισμός 4/4/2016. Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 25/10/07

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java III

Αντικειμενοστρεφής Προγραμματισμός

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

Προγραμματισμός Η/Υ. Ενότητα 5: Εντολές Επανάληψης

Μεθόδων Επίλυσης Προβλημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java II

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργώντας δικές μας Κλάσεις και Αντικείμενα

Αντικειµενοστρεφής Προγραµµατισµός

Ο πιο κάτω πίνακας περιγράφει σε ποιες περιπτώσεις χρησιμοποιούμε τους τρεις πιο πάνω τρόπους:

Υπολογισμός - Εντολές Ελέγχου

Εργαστήριο Java. Διδάσκουσα: Εργαστηριακοί Συνεργάτες:

Αντικειμενοστραφής Προγραμματισμός

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 29/11/07

Δομές ελέγχου & επανάληψης

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΕισαγωγήστουςΗ/Υ. PHP Hypertext Preprocessor

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Δομημένος Προγραμματισμός (ΤΛ1006)

2.1. Εντολές Σχόλια Τύποι Δεδομένων

Αντικειμενοστρεφής Προγραμματισμός

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 3 η : Επίλυση Προβληµάτων Χειµερινό Εξάµηνο 2011

Προγραμματισμός Η/Υ. Ενότητα 4: Εντολές Επιλογής

ΗΥ-150. Προγραμματισμός

ΚΥΠΡΙΑΚΗ ΕΤΑΙΡΕΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ CYPRUS COMPUTER SOCIETY ΠΑΓΚΥΠΡΙΟΣ ΜΑΘΗΤΙΚΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΠΛΗΡΟΦΟΡΙΚΗΣ 24/3/2007

Δομές ελέγχου ροής προγράμματος

ΗΥ-150. Προγραμματισμός

ΓΡΑΜΜΙΚΟΣ & ΔΙΚΤΥΑΚΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

Κεφάλαιο : Επαναλήψεις (o βρόγχος While) (Διάλεξη 9) Δομές Έλεγχου Προγράμματος

ΑΤΕΙ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ Αλγοριθμική και Προγραμματισμός

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Εισαγωγή στη Java

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Οντοκεντρικός Προγραμματισμός

ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Σύνθεση αντικειμένων Παράδειγμα: Τμήμα πανεπιστημίου

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Μέθοδοι

Είδη εντολών. Απλές εντολές. Εντολές ελέγχου. Εκτελούν κάποια ενέργεια. Ορίζουν τον τρόπο με τον οποίο εκτελούνται άλλες εντολές

Εισαγωγή στον Αντικειμενοστρεφή Προγραμματισμό Διάλεξη #2

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Δημιουργία Κλάσεων και Αντικειμένων

Τύποι δεδομένων, τελεστές, μεταβλητές

Εισαγωγή στον Προγραμματισμό

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

Κεφάλαιο : Επαναλήψεις (oι βρόχος While) ( ιάλεξη 9) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Λειτουργικά. Συστήματα Ι. Φ ρ ο ν τ ι σ τ ή ρ ι ο. Αριστείδης Ηλίας. Εργαστήριο Ηλεκτρονικών Υπολογιστών

Σχεδίαση Εφαρμογών και Υπηρεσιών Διαδικτύου 7 η Διάλεξη: Σύντομη εισαγωγή στην Java

Αντικειμενοστρεφής Προγραμματισμός

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα. Προγραμματισμός Η/Υ

Προγραμματισμός Η/Υ. Ενότητα 2β: Εισαγωγή στη C (Μέρος Δεύτερο)

Πρόβλημα 1: Αναζήτηση Ελάχιστης/Μέγιστης Τιμής

Διαδικαστικός Προγραμματισμός

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διάλεξη 20: Αναδρομή (Recursion) Διδάσκων: Παναγιώτης Ανδρέου

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Εισαγωγή στην πληροφορική

ΠΑΝΕΠΙΣΤΗΜΙΟ AΙΓΑIΟΥ & ΑΕΙ ΠΕΙΡΑΙΑ Τ.Τ. Τμήματα Ναυτιλίας και Επιχειρηματικών Υπηρεσιών & Μηχ. Αυτοματισμού ΤΕ. Εισαγωγή στη Python

ιαδικαστικός Προγραμματισμός

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Στόχοι και αντικείμενο ενότητας. Βασικές κατασκευές ΓΠ. Έλεγχος ροής προγράμματος. #4.. Εντολές Επιλογής

Κεφάλαιο : Επαναλήψεις (oι βρόγχοιfor, do-while) (Διάλεξη 10) Εντολές Επανάληψης που θα καλυφθούν σήμερα

Transcript:

Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 13/03/2017 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr

if statement if (CONDITION) { } STATEMENTS Συνθήκη Η έκφραση μπορεί να είναι είτε true είτε false if statement Αν μία συνθήκη είναι true, τότε το body της if statement εκτελείται Οι συνθήκες στα if statements σχηματίζονται με τελεστές ισότητας και σχεσιακούς τελεστές

Παράδειγμα public static void test(int x){ if (x > 5){ System.out.println(x + " is > 5"); } } public static void main(string[] arguments){ test(6); test(5); test(4); }

Τελεστές ισότητας και σχεσιακοί τελεστές Standard algebraic equality or relational operator Java equality or relational operator Sample Java condition Meaning of Java condition Equality operators == x == y x is equal to y!= x!= y x is not equal to y Relational operators > x > y x is greater than y < x < y x is less than y >= x >= y x is greater than or equal to y <= x <= y x is less than or equal to y

Τελεστές ισότητας ΜΗ ΧΡΗΣΙΜΟΠΟΙΕΙΤΕ ΠΟΤΕ == σε doubles! double a = Math.cos (Math.PI / 2); double b = 0.0; a = 6.123233995736766E-17 a == b επιστρέφει FALSE!

1 // Fig. 2.15: Comparison.java 2 // Compare integers using if statements, relational operato 3 // and equality operators. 4 import java.util.scanner; // program uses class Scanner 5 Παράδειγμα 6 public class Comparison 7 { 8 // main method begins execution of Java application 9 public static void main( String args[] ) 10 { 11 // create Scanner to obtain input from command window 12 Scanner input = new Scanner( System.in ); 13 14 int number1; // first number to compare 15 int number2; // second number to compare 16 17 System.out.print( "Enter first integer: " ); // prompt 18 number1 = input.nextint(); // read first number from user 19 20 System.out.print( "Enter second integer: " ); // prompt 21 number2 = input.nextint(); // read second number from user 22 23 if ( number1 == number2 ) 24 System.out.printf( "%d == %d\n", number1, number2 ); 25 26 if ( number1!= number2 ) 27 System.out.printf( "%d!= %d\n", number1, number2 ); 28 29 if ( number1 < number2 ) 30 System.out.printf( "%d < %d\n", number1, number2 );

31 32 if ( number1 > number2 ) 33 System.out.printf( "%d > %d\n", number1, number2 ); 34 35 Παράδειγμα if ( number1 <= number2 ) 36 System.out.printf( "%d <= %d\n", number1, number2 ); 37 38 if ( number1 >= number2 ) 39 System.out.printf( "%d >= %d\n", number1, number2 ); 40 41 } // end method main 42 43 } // end class Comparison Enter first integer: 777 Enter second integer: 777 777 == 777 777 <= 777 777 >= 777 Enter first integer: 1000 Enter second integer: 2000 1000!= 2000 1000 < 2000 1000 <= 2000 Enter first integer: 2000 Enter second integer: 1000 2000!= 1000 2000 > 1000 2000 >= 1000

Τελεστές ισότητας και Σχεσιακοί τελεστές Γραμμή 6: αρχίζει η δήλωση της class Comparison Γραμμή 12: ορίζει Scanner variable input και καταχωρεί μία Scanner που διαβάζει δεδομένα από standard input Γραμμές 14-15: δηλώνουν μεταβλητές int Γραμμές 17-18: ζητάνε από το χρήστη να εισάγει τον πρώτο ακέραιο και εισάγει την τιμή Γραμμές 20-21: ζητάνε από το χρήστη να εισάγει το δεύτερο ακέραιο και εισάγει την τιμή

Τελεστές ισότητας και Σχεσιακοί τελεστές 23 if ( number1 == number2 ) 24 System.out.printf( "%d == %d\n", number1, number2 ); if statement για τον έλεγχο ισότητας με (==) Αν οι μεταβλητές είναι ίσες (συνθήκη true) Εκτελείται η γραμμή 24 Αν οι μεταβλητές δεν είναι ίσες, τότε η εντολή παραλείπεται ΟΧΙ ; στο τέλος του if statement Άδειο statement Δεν εκτελείται καμία λειτουργία Γραμμές 26-27, 29-30, 32-33, 35-36 και 38-39 Ελέγχουν τα number1 και number2 με τους τελεστές!=, <, >, <= και >=, αντίστοιχα

Συχνό Προγραμματιστικό Λάθος Η σύγχυση του τελεστή ισότητας «==» με τον τελεστή ανάθεσης «=» μπορεί να προκαλέσει λογικό ή συντακτικό λάθος! Ο τελεστής ισότητας πρέπει να διαβάζεται ως ισούται με, και ο τελεστής ανάθεσης πρέπει να διαβάζεται and the assignment operator should be read as παίρνει ή παίρνει την τιμή. Μερικοί άνθρωποι διαβάζουν τον τελεστή ισότητας ως διπλό ίσον ή ίσον ίσον.

Συχνό Προγραμματιστικό Λάθος Είναι συντακτικό λάθος αν οι τελεστές ==,!=, >= και <= περιέχουν διαστήματα ανάμεσα στα σύμβολά τους, όπως στα = =,! =, > = και < =, αντιστοίχως. Η αναστροφή των τελεστών!=, >= και <=, όπως στα =!, => and =<, αποτελεί συντακτικό λάθος. Η τοποθέτηση ; αμέσως μετά τη δεξιά παρένθεση της συνθήκης σε μία πρόταση if είναι κανονικά λογικό σφάλμα.

Τελεστές boolean &&: logical AND : logical OR if (x > 6) { if ( x > 6 && x < 9) { if (x < 9) { } } }

else if (CONDITION) { STATEMENTS } else { STATEMENTS }

Παράδειγμα public static void test(int x){ } if (x > 5){ } else { } System.out.println(x + " is > 5"); System.out.println(x + " is not > 5"); } public static void main(string[] arguments){ test(6); test(5); test(4); }

else if if (CONDITION) { STATEMENTS } else if (CONDITION) { STATEMENTS } else if (CONDITION) { STATEMENTS } else { STATEMENTS }

Παράδειγμα public static void test(int x){ } if (x > 5){ System.out.println(x + " is > 5"); } else if (x == 5){ } else { } System.out.println(x + " equals 5"); System.out.println(x + " is < 5"); public static void main(string[] arguments){ test(6); test(5); test(4); }

Καλές προγραμματιστικές τεχνικές! Ο στόχος του καλού προγραμματιστικού στυλ είναι να είναι ο κώδικάς μας πιο ευανάγνωστος! Από εμάς και από τους άλλους!!!

Κανόνας #1: χρησιμοποείστε καλά (meaningful) ονόματα String a1; int a2; double b; // BAD!! String firstname; // GOOD String lastname; // GOOD int temperature; // GOOD

Κανόνας #2: Χρησιμοποιείστε indentation public static void main (String[] arguments) { int x = 5; x = x * x; if (x > 20) { } double y = 3.4; } System.out.println(x + is greater than 20. );

Κανόνας #3: Χρησιμοποιείστε κενούς χαρακτήρες Βάλετε κενούς χαρακτήρες σε πολύπλοκες εκφράσεις: // BAD!! double cel=fahr*42.0/(13.0-7.0); // GOOD double cel = fahr * 42.0 / (13.0-7.0);

Κανόνας #3: Χρησιμοποιείστε κενούς χαρακτήρες Βάλετε κενές γραμμές για βελτίωση αναγνωσιμότητας: public static void main (String[] arguments) { int x = 5; x = x * x; if (x > 20) { } System.out.println(x + is > 20. ); } double y = 3.4;

Κανόνας #4: Μην επαναλαμβάνετε ελέγχους if (basepay < 8.0) {... } else if (hours > 60) {... } else if (basepay >= 8.0 && hours <= 60) {... }

Κανόνας #4: Μην επαναλαμβάνετε ελέγχους if (basepay < 8.0) {... } else if (hours > 60) {... } else if (basepay >= 8.0 && hours <= 60) {... } BAD

Κανόνας #4: Μην επαναλαμβάνετε ελέγχους if (basepay < 8.0) {... } else if (hours > 60) {... } else {... }

Δομές ελέγχου Εντολές επανάληψης Γνωστές και ως εντολές βρόχου Επανειλημμένα εκτελούνται ενέργειες για όσο η συνθήκη συνέχισης του βρόχου παραμένει αληθής εντολή while Εκτελεί τις ενέργειες εντός του σώματός της 0 ή περισσότερες φορές εντολή do while Εκτελεί τις ενέργειες εντός του σώματός της 1 ή περισσότερες φορές εντολή for Εκτελεί τις ενέργειες εντός του σώματός της 0 ή περισσότερες φορές

Παραδείγματα Ακολουθούν παραδείγματα χρήσης των παραπάνω εντολών (ήδη γνωστών από τη C) σε JAVA

Παράδειγμα 1 Ψευδοκώδικας για την επίλυση του προβλήματος εύρεσης του μέσου όρου βαθμών σε μία τάξη 10 σπουδαστών με επανάληψη ελεγχόμενη από μετρητή (counter-controlled) 1 Set total to zero 2 Set grade counter to one 3 4 While grade counter is less than or equal to ten 5 Prompt the user to enter the next grade 6 Input the next grade 7 Add the grade into the total 8 Add one to the grade counter 9 10 Set the class average to the total divided by ten 11 Print the class average

1 // Fig. 4.6: GradeBook.java 2 // GradeBook class that solves class-average problem using 3 // counter-controlled repetition. 4 import java.util.scanner; // program uses class Scanner 5 6 public class GradeBook 7 { 8 private String coursename; // name of course this GradeBook represents 9 10 // constructor initializes coursename 11 public GradeBook(String name) 12 { 13 coursename = name; // initializes coursename 14 } // end constructor 15 16 // method to set the course name 17 public void setcoursename(string name) 18 { 19 coursename = name; // store the course name 20 } // end method setcoursename 21 22 // method to retrieve the course name 23 public String getcoursename() 24 { 25 return coursename; 26 } // end method getcoursename 27 Ανάθεση τιμής στη μεταβλητή coursename Δήλωση μεθόδου setcoursename Δήλωση μεθόδου getcoursename

28 // display a welcome message to the GradeBook user 29 public void displaymessage() Δήλωση μεθόδου 30 { displaymessage 31 // getcoursename gets the name of the course 32 System.out.printf( "Welcome to the grade book for\n%s!\n\n, 33 getcoursename() ); 34 } // end method displaymessage 35 36 // determine class average based on 10 grades entered by user 37 public void determineclassaverage() 38 { Δήλωση μεθόδου 39 // create Scanner to obtain input from command window determinecla 40 Scanner input = new Scanner(System.in); ssaverage 41 42 int total; // sum of grades entered by user Δήλωση και 43 int gradecounter; // number of the grade to be entered αρχικοποίηση next τη 44 int grade; // grade value entered by user μεταβλητή input 45 int average; // average of grades τύπου Scanner 46 47 // initialization phase 48 total = 0; // initialize total 49 gradecounter = 1; // initialize loop counter 50 Δήλωση τοπικών μεταβλητών total, gradecounter, grade and average τύπου int

51 // processing phase 52 while (gradecounter<=10) // loop 10 times 53 { 54 System.out.print("Enter grade: "); // prompt 55 grade = input.nextint(); // input next gradε 56 total = total + grade; // add grade 57 gradecounter = gradecounter + 1; // increment 58 } // end while 59 60 // termination phase 61 average = total / 10; // integer division 62 63 // display total and average of grades Αύξηση της μεταβλητήςμετρητή gradecounter 64 System.out.printf("\nTotal of all 10 grades is %d\n", total); 65 System.out.printf("Class average is %d\n", average); 66 } // end method determineclassaverage 67 68 } // end class GradeBook Εμφάνιση αποτελεσμάτων Υπολογισμός μέσου όρου βαθμών Ο βρόχος while επαναλαμβάνεται για όσο ισχύει ότι gradecounter <= 10

1 // Fig. 4.7: GradeBookTest.java 2 // Create GradeBook object and invoke its determineclassaverage method. 3 4 public class GradeBookTest 5 { 6 public static void main(string args[]) 7 { 8 // create GradeBook object mygradebook and 9 // pass course name to constructor 10 GradeBook mygradebook = new GradeBook( 11 "CS101 Introduction to Java Programming"); 12 13 mygradebook.displaymessage(); // display welcome message 14 mygradebook.determineclassaverage(); // find average 15 } // end main 16 17 } // end class GradeBookTest Δημιουργία νέου (new) αντικειμένου GradeBook Πέρασμα του ονόματος του μαθήματος στον κατασκευαστή GradeBook ως string Κλήση της determineclassaverage μεθόδου της GradeBook

Παρατηρήσεις Η εμπειρία έχει δείξει ότι το πιο δύσκολο κομμάτι επίλυσης προβλήματος σε έναν υπολογιστή είναι η επινόηση και ανάπτυξη του αλγόριθμου επίλυσης Εφόσον έχει καθοριστεί ένας σωστός αλγόριθμος, η διαδικασία παραγωγής ενός προγράμματος Java program (που να δουλεύει :-)) είναι απλά ρουτίνα

Αποφυγή λαθών Να αρχικοποιείτε κάθε μετρητή (counter) και μεταβλητή συνόλου (total), είτε στη δήλωσή της είτε με μια εντολή ανάθεσης Συνήθως οι μεταβλητές total αρχικοποιούνται στο 0. οι μετρητές αρχικοποιούνται στο 0 ή το 1.

Welcome to the grade book for CS101 Introduction to Java Programming! Enter grade: 67 Enter grade: 78 Enter grade: 89 Enter grade: 67 Enter grade: 87 Enter grade: 98 Enter grade: 93 Enter grade: 85 Enter grade: 82 Enter grade: 100 Total of all 10 grades is 846 Class average is 84

Συνηθισμένο λάθος Το να θεωρούμε ότι η ακέραιη διαίρεση στρογγυλοποιεί αντί να αποκόπτει μπορεί να οδηγήσει σε λανθασμένα αποτελέσματα. Για παράδειγμα,το 7 4, που φυσιολογικά ισούται με 1.75, αποκόπτεται σε 1 στην αριθμητική των ακεραίων, αντί να στρογγυλοποιείται στο 2.

Αποφυγή λαθών Όταν εκτελείται διαίρεση με μία έκφραση που θα μπορούσε να είναι και μηδέν, πρέπει να ελέγχουμε σαφώς την πιθανότητα αυτή και να τη διαχειριζόμαστε ανάλογα στο πρόγραμμά μας (π.χ. Εκτυπώνοντας ένα μήνυμα σφάλματος)

Παράδειγμα 2 Ο Ψευδοκώδικας του προηγούμενου προβλήματος για επανάληψη ελεγχόμενη από τιμή σήματος/τιμή-φρουρό (sentinel ή flag) για την επίλυση του προβλήματος εύρεσης του μέσου όρου βαθμών σε μία τάξη 1 Initialize total to zero 2 Initialize counter to zero 3 4 Prompt the user to enter the first grade 5 Input the first grade (possibly the sentinel) (π.χ. -1...) 6 7 While the user has not yet entered the sentinel 8 Add this grade into the running total 9 Add one to the grade counter 10 Prompt the user to enter the next grade 11 Input the next grade (possibly the sentinel) 12 13 If the counter is not equal to zero 14 Set the average to the total divided by the counter 15 Print the average 16 else 17 Print No grades were entered

1 // Fig. 4.9: GradeBook.java 2 // GradeBook class that solves class-average program using 3 // sentinel-controlled repetition. 4 import java.util.scanner; // program uses class Scanner 5 6 public class GradeBook 7 { 8 private String coursename; // name of course this GradeBook represents 9 10 // constructor initializes coursename 11 public GradeBook(String name) 12 { 13 coursename = name; // initializes coursename 14 } // end constructor 15 16 // method to set the course name 17 public void setcoursename(string name) 18 { 19 coursename = name; // store the course name 20 } // end method setcoursename 21 22 // method to retrieve the course name 23 public String getcoursename() 24 { 25 return coursename; 26 } // end method getcoursename 27 Ανάθεση τιμής στη μεταβλητή coursename Δήλωση μεθόδου setcoursename Δήλωση μεθόδου getcoursename

28 // display a welcome message to the GradeBook user 29 public void displaymessage() 30 { 31 // getcoursename gets the name of the course 32 System.out.printf("Welcome to the grade book for\n%s!\n\n", 33 getcoursename()); 34 } // end method displaymessage 35 36 // determine the average of an arbitrary number of grades 37 public void determineclassaverage() 38 { 39 // create Scanner to obtain input from command window 40 Scanner input = new Scanner(System.in); 41 42 int total; // sum of grades 43 int gradecounter; // number of grades entered 44 int grade; // grade value 45 double average; // number with decimal point for average 46 47 // initialization phase 48 total = 0; // initialize total 49 gradecounter = 0; // initialize loop counter 50 51 // processing phase 52 // prompt for input and read grade from user 53 System.out.print("Enter grade or -1 to quit: "); 54 grade = input.nextint(); 55 Δήλωση μεθόδου displaymessage Δήλωση μεθόδου determineclassaverage Δήλωση και αρχικοποίηση τη μεταβλητή input τύπου Scanner Δήλωση τοπικών μεταβλητών total, gradecounter, grade and average τύπου int

56 // loop until sentinel value read from user 57 while (grade!= -1) 58 { 59 total = total + grade; // add grade to total 60 gradecounter = gradecounter + 1; // increment counter 61 62 // prompt for input and read next grade from user 63 System.out.print("Enter grade or -1 to quit: "); 64 grade = input.nextint(); 65 } // end while 66 67 // termination phase 68 // if user entered at least one grade... 69 if (gradecounter!= 0) 70 { 71 // calculate average of all grades entered 72 average = (double) total / gradecounter; 73 74 // display total and average (with two digits of precision) 75 System.out.printf("\nTotal of the %d grades entered is %d\n", 76 gradecounter, total); 77 System.out.printf( "Class average is %.2f\n", average); 78 } // end if 79 else // no grades were entered, so output appropriate message 80 System.out.println("No grades were entered"); 81 } // end method determineclassaverage 82 83 } // end class GradeBook Ο βρόχος while επαναλαμβάνεται για όσο ισχύει ότι grade!= -1 δηλαδή μέχρις ότου η τιμή «φρουρός» γίνει - 1 Υπολογισμός του μέσου όρου χρησιμοποιώντας τον τελεστή αλλαγής τύπου (double) για ευθεία μετατροπή του τύπου Εμφάνιση μέσου όρου Εμφάνιση μηνύματος No grades were entered

Τελεστής αλλαγής τύπου Ο τελεστής αλλαγής τύπου χρησιμοποιείται για τη μετατροπή μεταξύ πρωταρχικών αριθμητικών τύπων, όπως int και double, και μεταξύ σχετιζόμενων τύπων αναφοράς (Πολυμορφισμός). Τελεστής αλλαγής τύπου σε λάθος τύπο => compilation errors ή runtime errors.

Java μετατροπές τύπων Μερικές φορές είναι βολική η μετατροπή ενός τύπου σε άλλο Π.χ. Μετατροπή ενός integer σε double κατά τον υπολογισμό Ποιες είναι οι δυνατές μετατροπές? Μετατροπές δεδομένων μπορούν να γίνουν μεταξύ διαφορετικών τύπων όταν δεν χάνεται πληροφορία Δυνατές από less precise σε more precise τύπους 2 είδη μετατροπών δεδομένων Widening ασφαλέστερη από small data type σε larger : char, short -> int, long, float, double Narrowing μπορεί να χαθεί πληροφορία από large data type σε smaller : double, float, long, int -> char, short

Αριθμητική προώθηση Συμβαίνει αυτόματα όταν τελεστές σε εκφράσεις μετατρέπουν τους τελεσταίους Π.χ. Όταν ένας αριθμός integer και ένας floating-point number χρησιμοποιούνται ως τελεσταίοι σε μία απλή αριθμητική πράξη, το αποτέλεσμα είναι floating point

Κανόνες προώθησης

1 // Fig. 4.10: GradeBookTest.java 2 // Create GradeBook object and invoke its determineclassaverage method. 3 4 public class GradeBookTest 5 { 6 public static void main(string args[]) 7 { αντικειμένου GradeBook 8 // create GradeBook object mygradebook and 9 // pass course name to constructor 10 GradeBook mygradebook = new GradeBook( 11 "CS101 Introduction to Java Programming"); 12 13 mygradebook.displaymessage(); // display welcome message 14 mygradebook.determineclassaverage(); // find average of grades 15 } // end main 16 17 } // end class GradeBookTest Κλήση της determineclassaverage μεθόδου της GradeBook Δημιουργία νέου (new) Πέρασμα του ονόματος του μαθήματος στον κατασκευαστή GradeBook ως string

Welcome to the grade book for CS101 Introduction to Java Programming! Enter grade or -1 to quit: 97 Enter grade or -1 to quit: 88 Enter grade or -1 to quit: 72 Enter grade or -1 to quit: -1 Total of the 3 grades entered is 257 Class average is 85.67

Παράδειγμα 3 Ψευδοκώδικας για το πρόβλημα αποτελεσμάτων εξετάσεων 1 Initialize passes to zero 2 Initialize failures to zero 3 Initialize student counter to one 4 5 While student counter is less than or equal to 10 6 Prompt the user to enter the next exam result 7 Input the next exam result 8 9 If the student passed 10 Add one to passes 11 Else 12 Add one to failures 13 14 Add one to student counter 15 16 Print the number of passes 17 Print the number of failures 18 19 If more than eight students passed 20 Print Raise tuition

1 // Fig. 4.12: Analysis.java 2 // Analysis of examination results. 3 import java.util.scanner; // class uses class Scanner 4 5 public class Analysis Δήλωση τοπικών μεταβλητών της 6 { processexamresults 7 public void processexamresults 8 { 9 // create Scanner to obtain input from command window 10 Scanner input = new Scanner(System.in); 11 12 // initializing variables in declarations 13 int passes = 0; // number of passes 14 int failures = 0; // number of failures 15 int studentcounter = 1; // student counter 16 int result; // one exam result (obtains value from user) 17 18 // process 10 students using counter-controlled loop 19 while (studentcounter <= 10) 20 { 21 // prompt user for input and obtain value from user 22 System.out.print("Enter result (1 = pass, 2 = fail): "); 23 result = input.nextint(); 24 Ο βρόχος while επαναλαμβάνεται για όσο ισχύει ότι studentcounter <= 10

25 // if...else nested in while 26 if (result == 1) // if result 1, 27 passes = passes + 1; // increment passes; 28 else // else result is not 1, so 29 failures = failures + 1; // increment failures 30 31 // increment studentcounter so loop eventually terminates 32 studentcounter = studentcounter + 1; 33 } // end while 34 35 // termination phase; prepare and display results 36 System.out.printf("Passed: %d\nfailed: %d\n", passes, failures); 37 38 // determine whether more than 8 students passed 39 if (passes > 8) 40 System.out.println("Raise Tuition"); 41 } // end method processexamresults 42 43 } // end class Analysis Έλεγχος για το αν ο φοιτητής πέρασε ή απέτυχε και αύξηση της αντίστοιχης μεταβλητής Έλεγχος αν περισσότεροι από 8 φοιτητές πέρασαν στην εξέταση

1 // Fig. 4.13: AnalysisTest.java 2 // Test program for class Analysis. 3 4 public class AnalysisTest 5 { 6 public static void main( String args[] ) 7 { 8 Analysis application = new Analysis(); // create Analysis object 9 application.processexamresults(); // call method to process results 10 } // end main 11 12 } // end class AnalysisTest Δημιουργία ενός αντικειμένου Analysis

Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 2 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Passed: 9 Failed: 1 Raise Tuition Περισσότεροι από 8 μαθητές πέρασαν την εξέταση Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 2 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 2 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 2 Enter result (1 = pass, 2 = fail): 2 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Enter result (1 = pass, 2 = fail): 1 Passed: 6 Failed: 4 ΑΣΚΗΣΗ: Τροποποιήστε την κλάση Analysis ώστε να επιτρέπει ως είσοδο μόνο 1 ή 2, ανάλογα με το αποτέλεσμα των εξετάσεων, και σε οποιαδήποτε άλλη είσοδο, να τυπώνει μήνυμα λάθους

Συνδυαστικοί Τελεστές Εκχώρησης Συνδυαστικοί τελεστές εκχώρησης Κάθε πρόταση της μορφής: μεταβλητή = μεταβλητή τελεστής έκφραση; Όπου τελεστής είναι ένας εκ των +, -, *, / ή % μπορεί να γραφεί στη μορφή: μεταβλητή τελεστής= έκφραση; Για παράδειγμα: η πρόταση c = c + 3; Μπορεί να γραφεί ως c += 3; Αυτή η πρόταση προσθέτει 3 στην τιμή της μεταβλητής c και αποθηκεύει το αποτέλεσμα στη μεταβλητή c

Αριθμητικοί Συνδυαστικοί Τελεστές Εκχώρησης Assignment operator Sample expression Explanation Assigns Assume: int c = 3, d = 5, e = 4, f = 6, g = 12; += c += 7 C = c + 7 10 to c -= d -= 4 d = d - 4 1 to d *= e *= 5 e = e * 5 20 to e /= f /= 3 f = f / 3 2 to f %= g %= 9 g = g % 9 3 to g

Τελεστές αύξησης και μείωσης Μοναδιαίοι τελεστές αύξησης και μείωσης Ο μοναδιαίος τελεστής αύξησης (++) προσθέτει ένα σε μία μεταβλητή Ο μοναδιαίος τελεστής μείωσης (--) αφαιρεί ένα από μία μεταβλητή Εκ των προτέρων τελεστής αύξησης (και μείωσης) Αλλάζει την τιμή της μεταβλητής, έπειτα χρησιμοποιεί τη νέα τιμή της μεταβλητής στην έκφραση όπου εμφανίζεται Εκ των υστέρων τελεστής αύξησης (και μείωσης) Χρησιμοποιεί την τρέχουσα τιμή της μεταβλητής στην έκφραση στην οποία εμφανίζεται, έπειτα αλλάζει την τιμή της μεταβλητής

Τελεστές αύξησης και μείωσης Operator Called ++ ++ -- -- prefix increment postfix increment prefix decrement postfix decrement Sample expression Explanation ++a a++ --b b-- Increment a by 1, then use the new value of a in the expression in which a resides. Use the current value of a in the expression in which a resides, then increment a by 1. Decrement b by 1, then use the new value of b in the expression in which b resides. Use the current value of b in the expression in which b resides, then decrement b by 1.

1 // Fig. Outline 4.16: Increment.java 2 // Prefix increment and postfix increment operators. 3 4 public class Increment 5 { 6 public static void main( String args[] ) 7 { 8 int c; 9 10 // demonstrate postfix increment operator 11 c = 5; // assign 5 to c 12 System.out.println( c ); 13 System.out.println( c++ ); 14 System.out.println( c ); 15 16 System.out.println(); // skip a line 17 18 // demonstrate prefix increment operator 19 c = 5; // assign 5 to c 20 System.out.println( c ); 21 System.out.println( ++c ); 22 System.out.println( c ); 23 24 } // end main 25 26 } // end class Increment Αύξησε εκ των υστέρων τη μεταβλητή c Αύξησε εκ των προτέρων τη μεταβλητή c 5 5 6 5 6 6

Σύνηθες σφάλμα προγραμματισμού Η απόπειρα χρήσης του τελεστή αύξησης ή μείωσης σε μία έκφραση διαφορετική εκείνης στην οποία μπορεί να εκχωρηθεί μία τιμή, αποτελεί συντακτικό σφάλμα Για παράδειγμα, η γραφή ++(x + 1) αποτελεί συντακτικό σφάλμα γιατί η (x + 1) δεν είναι μία μεταβλητή

Παράδειγμα i = 0; count = 2 + i++; i count 1 2 i = 0; count = 2 + ++i; i count 1 3

Πρωταρχικοί τύποι Η Java αναφέρεται ως γλώσσα σθεναρών τύπων Όλες οι μεταβλητές έχουν έναν τύπο Σε αντίθεση με τη C και C++, οι πρωταρχικοί τύποι στη Java μπορούν να μεταφερθούν σε όλες τις πλατφόρμες που υποστηρίζουν Java Χάριν σε αυτό και πολλά άλλα χαρακτηριστικά δυνατοτήτων μεταφοράς της Java, ένας προγραμματιστής μπορεί να γράψει ένα πρόγραμμα μία φορά και να είναι σίγουρος ότι θα εκτελείται σε κάθε πλατφόρμα υπολογιστή που υποστηρίζει Java Αυτή η δυνατότητα αναφέρεται μερικές φορές ως WORA (Write Once, Run Anywhere Γράφετε μία φορά, εκτελείτε οπουδήποτε).

Ασκήσεις Γράψτε 4 διαφορετικές προτάσεις που καθεμία προσθέτει το 1 στη μεταβλητή x x = x+1; x += 1; ++x; x++; Ποια η τιμή των μεταβλητών στην ακόλουθη πρόταση? Υποθέστε ότι όταν αρχίζει η εκτέλεση της πρότασης, όλες οι μεταβλητές είναι τύπου int και έχουν την τιμή 5 product *= x++; product= 25; x=6;

Ασκήσεις Προσδιορίστε τα λάθη στον ακόλουθο κώδικα: while ( c<=5) { product *= c; ++c; if (gender == 1) System.out.println ( Woman ); else; System.out.println ( Man ); while ( z >= 0) sum += z;

Ασκήσεις class Test { public static void main(string[] args) { int result, val_1, val_2; result = (val_1 = 1) + (val_2 = 2); System.out.println("val_1 = "+val_1); System.out.println("val_2 = "+val_2); System.out.println("result = "+result); } } val_1 =? 1 val_2 =? 2 result =? 3

Ασκήσεις float result; int i,j; i=25; j=10; result = i/j; Result? 2.0!!! float result; int i,j; i=25; j=10; result = (float) i/j; Result? 2.5!!!

Άλλες γνωστές δομές ελέγχου for, do while, switch

Ακολουθεί παράδειγμα χρήσης της εντολής while

1 // Fig. 5.1: WhileCounter.java 2 // Counter-controlled repetition with the while repetition statement. 3 4 public class WhileCounter 5 { 6 public static void main( String args[] ) 7 { 8 int counter = 1; // declare and initialize control variable 9 10 while ( counter <= 10 ) // loop-continuation condition 11 { Condition tests for counter s 12 System.out.printf( "%d ", counter ); final value 13 ++counter; // increment control variable by 1 14 } // end while 15 16 System.out.println(); // output a newline 17 } // end main 18 } // end class WhileCounter 1 2 3 4 5 6 7 8 9 10 Increment for counter Control-variable name is counter Control-variable initial value is 1

Ακολουθούν παραδείγματα χρήσης της εντολής for

1 // Fig. 5.2: ForCounter.java 2 // Counter-controlled repetition with the for repetition statement. 3 4 public class ForCounter 5 { 6 public static void main( String args[] ) 7 { 8 // for statement header includes initialization, 9 // loop-continuation condition and increment 10 for ( int counter = 1; counter <= 10; counter++ ) 11 System.out.printf( "%d ", counter ); 12 13 System.out.println(); // output a newline 14 } // end main 15 } // end class ForCounter Αύξηση μετρητή counter 1 2 3 4 5 6 7 8 9 10 Το όνομα της μεταβλητής ελέγχου είναι counter Η αρχική της τιμή είναι 1 Έλεγχος συνθήκης για την τελική τιμή του counter

Παραδείγματα χρήσης for

Παραδείγματα χρήσης for for ( initialization; loopcontinuationcondition; increment ) statement; can usually be rewritten as: initialization; while ( loopcontinuationcondition ) { statement; increment; }

Παραδείγματα χρήσης for Μεταβλητές ελέγχου σε εντολές for Η μεταβλητή αλλάζει από 1 εως 100 με αυξήσεις κατά 1 for ( int i = 1; i <= 100; i++ ) Η μεταβλητή αλλάζει από 100 εως 1 με αυξήσεις κατά -1 for ( int i = 100; i >= 1; i-- ) Η μεταβλητή αλλάζει από 7 εως 77 με αυξήσεις κατά 7 for ( int i = 7; i <= 77; i += 7 ) Η μεταβλητή αλλάζει από 20 εως 2 με μειώσεις κατά 2 for ( int i = 20; i >= 2; i -= 2 ) Η μεταβλητή αλλάζει με βάση την ακολουθία : 2, 5, 8, 11, 14, 17, 20 for ( int i = 2; i <= 20; i += 3 ) Η μεταβλητή αλλάζει με βάση την ακολουθία : 99, 88, 77, 66, 55, 44, 33, 22, 11, 0 for ( int i = 99; i >= 0; i -= 11 )

1 // Fig. 5.5: Sum.java 2 // Summing integers with the for statement. 3 4 public class Sum 5 { 6 public static void main( String args[] ) 7 { increment number by 2 each iteration 8 int total = 0; // initialize total 9 10 // total even integers from 2 through 20 11 for ( int number = 2; number <= 20; number += 2 ) 12 total += number; 13 14 System.out.printf( "Sum is %d\n", total ); // display results 15 } // end main 16 } // end class Sum Sum is 110 Άθροισμα ζυγών αριθμών από το 2 μέχρι το 20. Αποθήκευση αποτελέσματος σε μεταβλητή int με το όνομα total

1 // Fig. 5.6: Interest.java 2 // Compound-interest calculations with for. 3 4 public class Interest 5 { 6 public static void main( String args[] ) 7 { 8 double amount; // amount on deposit at end of each year 9 double principal = 1000.0; // initial amount before interest 10 double rate = 0.05; // interest rate 11 12 // display headers 13 System.out.printf( "%s%20s\n", "Year", "Amount on deposit" ); 14 Η Java μεταχειρίζεται τους αρ. κινητής υποδιαστολής σαν τύπους double Το δεύτερο string στοιχίζεται στα δεξιά και εμφανίζεται με ένα εύρος πεδίου 20

15 // calculate amount on deposit for each of ten years 16 for ( int year = 1; year <= 10; year++ ) 17 { 18 // calculate new amount for specified year Υπολογισμός του amount με εντολή for 19 ); amount = principal * Math.pow( 1.0 + rate, year 20 21 // display the year and the amount 22 ); System.out.printf( "%4d%,20.2f\n", year, amount 23 } // end for 24 } // end main 25 } // end class Interest Χρήση του κόμματος (,) για εμφάνιση του amount με διαχωριστή χιλιάδων Οι κλάσεις παρέχουν μεθόδους που εκτελούν εργασίες σε αντικείμενα. Στην πραγματικότητα οι περισσότερες μέθοδοι καλούνται σε ένα συγκεκριμένο αντικείμενο. Πολλές κλάσεις παρέχουν μεθόδους που εκτελούν εργασίες και δεν απαιτούν αντικείμενα. Τέτοιες μέθοδοι ονομάζονται static μέθοδοι Η Java δεν περιλαμβάνει τελεστή ύψωσης σε δύναμη, συνεπώς οι σχεδιαστές της κλάσης Math όρισαν τη static μέθοδο pow για την ύψωση τιμής σε δύναμη

Year Amount on deposit 1 1,050.00 2 1,102.50 3 1,157.63 4 1,215.51 5 1,276.28 6 1,340.10 7 1,407.10 8 1,477.46 9 1,551.33 10 1,628.89

Ακολουθούν παραδείγματα χρήσης της εντολής do while Παρόμοιο με την εντολή while Ελέγχει τη συνθήκη συνέχισης του βρόχου, μετά την εκτέλεση του σώματος του βρόχου Άρα, το σώμα του βρόχου εκτελείται τουλάχιστον μία φορά

1 // Fig. 5.7: DoWhileTest.java 2 // do...while repetition statement. 3 4 public class DoWhileTest 5 { 6 public static void main( String args[] ) 7 { 8 int counter = 1; // initialize counter 9 10 do 11 { 12 System.out.printf( "%d ", counter ); 13 ++counter; 14 } while ( counter <= 10 ); // end do...while 15 16 System.out.println(); // outputs a newline 17 } // end main 18 } // end class DoWhileTest 1 2 3 4 5 6 7 8 9 10 Declares and initializes control variable counter Variable counter s value is displayed before testing counter s final value

Ακολουθούν παραδείγματα χρήσης της εντολής switch

1 // Fig. 5.9: GradeBook.java 2 // GradeBook class uses switch statement to count A, B, C, D and F grades. 3 import java.util.scanner; // program uses class Scanner 4 5 public class GradeBook 6 { 7 private String coursename; // name of course this GradeBook represents 8 private int total; // sum of grades 9 private int gradecounter; // number of grades entered 10 private int acount; // count of A grades 11 private int bcount; // count of B grades 12 private int ccount; // count of C grades 13 private int dcount; // count of D grades 14 private int fcount; // count of F grades 15 16 // constructor initializes coursename; 17 // int instance variables are initialized to 0 by default 18 public GradeBook( String name ) 19 { 20 coursename = name; // initializes coursename 21 } // end constructor 22 23 // method to set the course name 24 public void setcoursename( String name ) 25 { 26 coursename = name; // store the course name 27 } // end method setcoursename 28

29 // method to retrieve the course name 30 public String getcoursename() 31 { 32 return coursename; 33 } // end method getcoursename 34 35 // display a welcome message to the GradeBook user 36 public void displaymessage() 37 { 38 // getcoursename gets the name of the course 39 System.out.printf( "Welcome to the grade book for\n%s!\n\n", 40 getcoursename() ); 41 } // end method displaymessage 42 43 // input arbitrary number of grades from user 44 public void inputgrades() 45 { 46 Scanner input = new Scanner( System.in ); 47 48 int grade; // grade entered by user 49 50 System.out.printf( "%s\n%s\n %s\n %s\n", 51 "Enter the integer grades in the range 0-100.", 52 "Type the end-of-file indicator to terminate input:", 53 "On UNIX/Linux/Mac OS X type <ctrl> d then press Enter", 54 "On Windows type <ctrl> z then press Enter" ); 55

56 // loop until user enters the end-of-file indicator 57 while ( input.hasnext() ) 58 { 59 grade = input.nextint(); // read grade 60 total += grade; // add grade to total 61 ++gradecounter; // increment number of grades 62 63 // call method to increment appropriate counter 64 incrementlettergradecounter( grade ); 65 } // end while 66 } // end method inputgrades 67 68 // add 1 to appropriate counter for specified grade 69 public void incrementlettergradecounter( int numericgrade ) 70 { 71 // determine which grade was entered 72 switch ( grade / 10 ) 73 { 74 case 9: // grade was between 90 75 case 10: // and 100 76 ++acount; // increment acount 77 break; // necessary to exit switch 78 79 case 8: // grade was between 80 and 89 80 ++bcount; // increment bcount 81 break; // exit switch 82 Η (grade / 10 ) είναι έκφραση ελέγχου Η συνθήκη βρόχου χρησιμοποιεί τη μέθοδο hasnext για να προσδιορίσει να υπάρχουν άλλα δεδομένα εισόδου Η εντολή switch καθορίζει ποια ταμπέλα case θα εκτελεστεί, ανάλογα με την έκφραση ελέγχου

83 case 7: // grade was between 70 and 79 84 ++ccount; // increment ccount 85 break; // exit switch 86 87 case 6: // grade was between 60 and 69 88 ++dcount; // increment dcount 89 break; // exit switch 90 91 default: // grade was less than 60 92 ++fcount; // increment fcount 93 break; // optional; will exit switch anyway 94 } // end switch 95 } // end method incrementlettergradecounter 96 97 // display a report based on the grades entered by user 98 public void displaygradereport() 99 { 100 System.out.println( "\ngrade Report:" ); 101 102 // if user entered at least one grade... 103 if ( gradecounter!= 0 ) 104 { 105 // calculate average of all grades entered 106 double average = (double) total / gradecounter; 107 Η προεπιλεγμένη περίπτωση default case είναι η grade μικρότερο του 60

108 // output summary of results 109 System.out.printf("Total of the %d grades entered is %d\n", 110 gradecounter, total ); 111 System.out.printf("Class average is %.2f\n", average); 112 System.out.printf("%s\n%s%d\n%s%d\n%s%d\n%s%d\n%s%d\n", 113 "Number of students who received each grade:", 114 "A: ", acount, // display number of A grades 115 "B: ", bcount, // display number of B grades 116 "C: ", ccount, // display number of C grades 117 "D: ", dcount, // display number of D grades 118 "F: ", fcount ); // display number of F grades 119 } // end if 120 else // no grades were entered, so output appropriate message 121 System.out.println( "No grades were entered" ); 122 } // end method displaygradereport 123} // end class GradeBook

1 // Fig. 5.10: GradeBookTest.java 2 // Create GradeBook object, input grades and display grade report. 3 4 public class GradeBookTest 5 { 6 public static void main( String args[] ) 7 { 8 // create GradeBook object mygradebook and 9 // pass course name to constructor 10 GradeBook mygradebook = new GradeBook( 11 "CS101 Introduction to Java Programming" ); 12 13 mygradebook.displaymessage(); // display welcome message 14 mygradebook.inputgrades(); // read grades from user 15 mygradebook.displaygradereport(); // display report based on grades 16 } // end main 17 } // end class GradeBookTest Κλήση των public μεθόδων της GradeBook για μέτρηση βαθμών

Welcome to the grade book for CS101 Introduction to Java Programming! Enter the integer grades in the range 0-100. Type the end-of-file indicator to terminate input: On UNIX/Linux/Mac OS X type <ctrl> d then press Enter On Windows type <ctrl> z then press Enter 99 92 45 57 63 71 76 85 90 100 ^Z Grade Report: Total of the 10 grades entered is 778 Class average is 77.80 Number of students who received each grade: A: 4 B: 1 C: 2 D: 1 F: 2

Εντολές break και continue break/continue Αλλαγή ροής ελέγχου Εντολή break Προκαλεί άμεση έξοδο από τη δομή ελέγχου Χρησιμοποιείται με τις εντολές while, for, do while ή switch Εντολή continue Παραλείπει τις εναπομένουσες εντολές σε ένα σώμα βρόχου Προχωρά στην επόμενη επανάληψη Χρησιμοποιείται με τις εντολές while, for ή do while

1 // Fig. 5.12: BreakTest.java 2 // break statement exiting a for statement. 3 public class BreakTest 4 { 5 public static void main( String args[] ) 6 { 7 int count; // control variable also used after loop terminates 8 9 for ( count = 1; count <= 10; count++ ) // loop 10 times 10 { 11 if ( count == 5 ) // if count is 5, 12 break; // terminate loop 13 14 System.out.printf( "%d ", count ); 15 } // end for 16 17 System.out.printf( "\nbroke out of loop at count = %d\n", count ); 18 } // end main 19 } // end class BreakTest 1 2 3 4 Broke out of loop at count = 5 Επανάληψη 10 φορές Έξοδος από την εντολή for (break) όταν η count γίνει 5

1 // Fig. 5.13: ContinueTest.java 2 // continue statement terminating an iteration of a for statement. 3 public class ContinueTest 4 { 5 public static void main( String args[] ) 6 { Επανάληψη 10 φορές 7 for ( int count = 1; count <= 10; count++ ) // loop 10 times 8 { 9 if ( count == 5 ) // if count is 5, 10 continue; // skip remaining code in loop 11 12 System.out.printf( "%d ", count ); 13 } // end for 14 15 System.out.println( "\nused continue to skip printing 5" ); 16 } // end main 17 } // end class ContinueTest Παραλείπεται η γραμμή 12 και συνεχίζουμε από τη γραμμή 7 όταν η count γίνει 5 1 2 3 4 6 7 8 9 10 Used continue to skip printing 5

Παράδειγμα Ποια θα είναι η τιμή της μεταβλητής a μετά την εκτέλεση του παρακάτω κώδικα? public class test { } public static void main( String args[] ){ int a=3; switch (a) { default: } case 1: case 2: case 3: }; a=a+1; a=a+2; a=a+3; a=a+100;

Λογικοί Τελεστές Λογικοί τελεστές Επιτρέπουν το σχηματισμό πολύπλοκων συνθηκών Συνδυάζουν απλές συνθήκες Java λογικοί τελεστές && (conditional AND) & ^! (conditional OR) (boolean logical AND) (boolean logical inclusive OR) (boolean logical exclusive OR) (logical NOT)

Λογικοί Τελεστές Τελεστής συνθηκών AND (&&) Έστω το ακόλουθο if if ( gender == FEMALE && age >= 65 ) ++seniorfemales; Η συνδυαστική συνθήκη είναι true Αν και μόνο αν και οι δύο απλές συνθήκες είναι true Η συνδυαστική συνθήκη είναι false Αν και μόνο αν μία από τις δύο ή και οι δύο απλές συνθήκες είναι false

Πίνακας αλήθειας expression1 expression2 expression1 && expression2 false false False false true False true false False true true True

Λογικοί Τελεστές Τελεστής συνθηκών OR ( ) Έστω το ακόλουθο if if ( ( semesteraverage >= 90 ) ( finalexam >= 90 ) System.out.println( Student grade is A ); Η συνδυαστική συνθήκη είναι true Αν και μόνο αν μία από τις δύο ή και οι δύο απλές συνθήκες είναι true Η συνδυαστική συνθήκη είναι false Αν και μόνο αν και οι δύο απλές συνθήκες είναι false

Πίνακας αλήθειας expression1 expression2 expression1 expression2 false false false false true true true false true true true true

Λογικοί Τελεστές Εκτίμηση Short-Circuit πολύπλοκων συνθηκών Μέρη έκφρασης που περιέχουν τελεστές && ή εκτιμούνται μόνο μέχρι να είναι γνωστό αν η συνθήκη είναι true ή false Π.χ., ( gender == FEMALE ) && ( age >= 65 ) Σταματά αμέσως αν η gender δεν είναι ίση με FEMALE

Λογικοί Τελεστές Boolean Logical AND (&) Operator Όπως και && ΟΜΩΣ πάντοτε υπολογίζουν και τους δύο τελεστέους Boolean Logical OR ( ) Operator Όπως και ΟΜΩΣ πάντοτε υπολογίζουν και τους δύο τελεστέους

Λογικοί Τελεστές Boolean Logical Exclusive OR (^) Αν ένας από τους τελεστέους είναι true και ο άλλος είναι false Τότε true Αν και οι δύο τελεστέοι είναι true ή και οι δύο είναι false Τότε false Logical Negation (!) Operator Μοναδιαίος τελεστής

Πίνακας αλήθειας expression1 expression2 expression1 ^ expression2 false false false false true true true false true true true false

Πίνακας αλήθειας expression false true!expression true false

Ασκήσεις Προσδιορίστε τα λάθη στον ακόλουθο κώδικα: i=1; while ( i<=10); } ++i; Ο ακόλουθος κώδικας θα πρέπει να προβάλει τιμές 1-10: n=1; while ( n < 10) System.out.println ( n++ );

Πηγές/Acknowledgements http://java.sun.com/j2se H. M. Deitel, P. J. Deitel, Java Προγραμματισμός, 6η έκδοση, Μ. Γκιούρδας, 2006 D. Barnes, M. Kolling, Αντικειμενοστρεφής Προγραμματισμός σε Java, Κλειδάριθμος, 2008 Βασίλης Χριστοφίδης, Αντικειμενοστρεφής Προγραμματισμός, Πανεπιστήμιο Κρήτης Κ. Τσαγκάρης, Εισαγωγή στις εφαρμογές της Java, Πανεπιστήμιο Πειραιώς Jones, Evan, Adam Marcus, and Eugene Wu. 6.092 Introduction to Programming in Java,January IAP 2010. (Massachusetts Institute of Technology: MIT OpenCourseWare), http://ocw.mit.edu (Accessed 10 Mar, 2013). License: Creative Commons BY-NC-SA