Πανεπιστήμιο Πειραιά Τμήμα Ψηφιακών Συστημάτων Αντικειμενοστρεφής Προγραμματισμός 5/3/2018 Δρ. Ανδριάνα Πρέντζα Αναπληρώτρια Καθηγήτρια aprentza@unipi.gr
Εμφάνιση κειμένου με την printf System.out.printf ισοδύναμο με System.out.format Εμφανίζει μορφοποιημένα τα δεδομένα Δέχεται ως παραμέτρους: String format, Object... args Το format είναι ένα string που καθορίζει τι format θα χρησιμοποιηθεί args είναι η λίστα των μεταβλητών που θα τυπωθούν με αυτό το format
Εμφάνιση κειμένου με την printf Παράδειγμα System.out.printf("The value of " + "the float variable is " + "%f, while the value of the " + "integer variable is %d, " + "and the string is %s", floatvar, intvar, stringvar); Η 1 η παράμετρος, format, είναι τύπου string και καθορίζει πώς τα αντικείμενα στη 2 η παράμετρο θα εμφανιστόύν. Η 1 η παράμετρος περιέχει απλό κείμενο αλλά και καθοριστές του format (format specifiers), δηλ. ειδικούς χαρακτήρες που καθορίζουν το format των ορισμάτων - Object... Args Π.χ. 0.3f σημαίνει ότι θα έχουμε 3 δεκαδικά ψηφία
Εμφάνιση κειμένου με την printf 1 // Welcome3a.java 2 // Printing multiple lines in a dialog box. 3 4 public class Welcome3a 5 { 6 // main method begins execution of Java application 7 public static void main( String args[] ) 8 { 9 System.out.printf("%s\n%s\n", 10 "Welcome to", "Java Programming!" ); 11 12 } // end method main 13 14 } // end class Welcome3a System.out.printf εμφανίζει μορφοποιημένα τα δεδομένα Welcome to Java Programming!
Τύποι και μεταβλητές Είδη τιμών που μπορούν να αποθηκευτούν και να τις επεξεργαστεί κάποιος boolean: Truth value (true or false) int: Integer (0, 1, -47) double: Real number (3.14, 1.0, -2.1) String: Text ( hello, example ). Μεταβλητές Ονοματισμένη θέση που αποθηκεύει μία τιμή ενός τύπου. Ορισμός: TYPE NAME; Παράδειγμα:String foo;
Καταχώρηση (Assignment) Χρησιμοποιούμε = για να δώσουμε τιμή σε μεταβλητή Παράδειγμα: String foo; foo = IAP 6.092 ; Μπορεί να συνδυαστεί με δήλωση τύπου Παράδειγμα: double badpi = 3.14; boolean ismarch = true;
Εμφάνιση κειμένου με μεταβλητή 1 // Welcome3b.java 2 // Printing variable value 3 4 public class Welcome3b 5 { 6 // main method begins execution of Java application 7 public static void main( String args[] ) 8 { 9 String foo= Welcome to Java Programming ; 10 System.out.println(foo); 11 foo= Something else ; 12 System.out.println(foo); 13 } // end method main 14 15 } // end class Welcome3b Welcome to Java Programming Something else
Τελεστές Σύμβολα για απλούς υπολογισμούς Καταχώρηση: = Πρόσθεση: + Αφαίρεση: - Πολλαπλασιασμός: * Διαίρεση: / Σειρά εκτέλεσης πράξεων Standard κανόνες μαθηματικών: Παρενθέσεις Πολλαπλασιασμός και διαίρεση Πρόσθεση και αφαίρεση
Συνένωση ακολουθιών String Concatenation (+) String text = "hello" + " world"; text = text + " number " + 5; // text = "hello world number 5"
Μία δεύτερη εφαρμογή Java Πρόσθεση 2 ακέραιων αριθμών Χρήση της Scanner για ανάγνωση 2 ακέραιων από το χρήστη Χρήση printf για εμφάνιση του αθροίσματος των 2 τιμών Χρήση packages
1// Fig. 2.7: Addition.java 2// Addition program that displays the sum of two numbers. 3import java.util.scanner; // program uses class Scanner 4 Πρόσθεση 2 ακέραιων Η δήλωση import εισάγει την 5public class Addition κλάση Scanner από το πακέτο 6{ (package) java.util. 7 // main method begins execution of Java application 8 public static void main (String args[]) 9 { 10 // create Scanner to obtain input from command window 11 Scanner input = new Scanner(System.in); 12 13 int number1; // first number to add 14 int number2; // second number to add 15 int sum; // sum of number1 and number2 16 17 System.out.print("Enter first integer: "); // prompt 18 number1 = input.nextint(); // read first number Δήλωση και αρχικοποίηση της μεταβλητής input, που είναι μία Scanner. Δήλωση μεταβλητών number1, number2 και sum. Διαβάζει έναν integer από το χρήστη και τον αναθέτει στη number1.
20 System.out.print("Enter second integer: "); //prompt 21 number2 = input.nextint(); // read second number from user 22 23 sum = number1 + number2; // add numbers 24 Πρόσθεση 2 ακέραιων 25 System.out.printf("Sum is %d\n", sum); // display sum 26 στη number2. 27 } // end method main 28 29} // end class Addition Enter first integer: 45 Enter second integer: 72 Sum is 117 Εμφανίζει το sum με χρήση μορφοποιημένης εξόδου Διαβάζει έναν integer από το χρήστη και τον αναθέτει Υπολογίζει το άθροισμα των number1 και number2, και θέτει το αποτέλεσμα στη sum.
Πρόσθεση 2 ακέραιων 3 import java.util.scanner; // program uses class Scanner Δηλώσεις import Χρησιμοποιούνται από τον compiler για να προσδιορίζει και να εντοπίζει classes Του υποδεικνύει να φορτώσει την κλάση Scanner από το package java.util 5 public class Addition 6 { Έναρξη κλάσης public class Addition Το όνομα του αρχείου πρέπει να είναι Addition.java Γραμμές 8-9: ξεκινά η main
Αποφυγή λαθών Όλες οι δηλώσεις import πρέπει να εμφανίζονται πριν τη δήλωση της κλάσης στο αρχείο Διαφορετικά (π.χ. Στο σώμα δήλωσης ή μετά τη δήλωση της κλάσης) syntax error Αν ξεχάσουμε να συμπεριλάβουμε μια δήλωση import για μια κλάση που χρησιμοποιούμε στο πρόγραμμα Συνήθως cannot resolve symbol.
10 // create Scanner to obtain input from command window 11 Scanner input = new Scanner(System.in); Πρόσθεση 2 ακέραιων Η input είναι αντικείμενο τύπου Scanner δίνει τη δυνατότητα στο πρόγραμμα να διαβάσει δεδομένα για χρήση Έχουμε δήλωση μεταβλητής Θέση στη μνήμη που αποθηκεύει μία τιμή Δήλωση με όνομα και τύπο πριν τη χρήση Με το = η input αποκτά ένα στιγμιότυπο της κλάσης Scanner Αυτή η έκφραση δημιουργεί ένα αντικείμενο της κλάσης Scanner που διαβάζει τα δεδομένα που πληκτρολογεί ο χρήστης Όνομα μεταβλητής: any valid identifier Declarations end with semicolons ; Initialize variable in its declaration Equal sign Standard input object System.in
Πρόσθεση 2 ακέραιων Δήλωση μεταβλητών number1, number2 και sum τύπου int int holds integer values (whole numbers): i.e., 0, -4, 97 Types float and double can hold decimal numbers Type char can hold a single character: i.e., x, $, \n, 7 int, float, double and char are primitive types Προσθήκη σχολίων για σκοπό των μεταβλητών 13 int number1; // first number to add 14 int number2; // second number to add 15 int sum; // second number to add Κλασικά, μπορούμε να δηλώσουμε πολλαπλές μεταβλητές του ίδιου τύπου μαζί int number1, // first number to add number2, // second number to add sum; // second number to add Χρήση διαχωριστή (comma)
Προσοχή Κατά συνθήκη, τα ονόματα των μεταβλητών ξεκινούν με πεζά γράμματα Και κάθε λέξη στο όνομα μετά την πρώτη λέξη ξεκινά με κεφαλαίο γράμμα Παράδειγμα firstnumber
Ορισμός Μεταβλητών Τύπος μεταβλητής Γενικά Όνομα_Μεταβλητής παραδείγματα int number1; float a, b, c = 5.5; boolean temp; char mychar = c ; Δήλωση και αρχικοποίηση μαζί
Οι βασικοί τύποι δεδομένων στη Java Τύποι Δεδομένων byte Ακέραιοι short, int, long Κινητής Υποδιαστολής float, double boolean Χαρακτήρες char
Τύποι Δεδομένων (με παραδείγματα) Literal Data Type 178 int 8864L long 37.266 double 37.266D double 87.363F float 26.77e3 double c true false char boolean boolean
Primitive datatypes (integers) Πρωταρχικοί τύποι δεδομένων
Primitive datatypes (floating point)
Miscellaneous datatypes
Πρόσθεση 2 ακέραιων 17 System.out.print( "Enter first integer: " ); // prompt Καλείται ένα prompt κατευθύνει το χρήστη να κάνει μια λειτουργία Package java.lang 18 number1 = input.nextint(); // read first number from user Το αποτέλεσμα της κλήσης του nextint δίνεται στη number1 με χρήση του τελεστή ανάθεσης = Τελεστής ανάθεσης = δυαδικός τελεστής έχει δύο τελεστέους Η έκφραση στα δεξιά υπολογίζεται και ανατίθεται στη μεταβλητή στα αριστερά Δηλ: η number1 παίρνει την τιμή της input.nextint()
Προσοχή!!! Εξ ορισμού, το πακέτο (package) java.lang εισάγεται σε κάθε πρόγραμμα Java Επομένως, το java.lang είναι το μόνο package στο Java API που δε χρειάζεται δήλωση import
Πρόσθεση 2 ακέραιων 20 System.out.print( "Enter second integer: " ); // prompt Ομοίως με πριν για το δεύτερο ακέραιο 21 number2 = input.nextint(); // read second number from user Ομοίως με πριν, αναθέτει στη number2 τον δεύτερο εισαχθέντα ακέραιο 23 sum = number1 + number2; // add numbers Δήλωση ανάθεσης Υπολογίζει το άθροισμα των number1 και number2 (right hand side) Χρήση τελεστή ανάθεσης = για ανάθεση αποτελέσματος στη μεταβλητή sum Δηλ.: Η sum παίρνει την τιμή του number1 + number2
Πρόσθεση 2 ακέραιων 25 System.out.printf( "Sum is %d\n: ", sum ); // display sum Χρήση System.out.printf για εμφάνιση αποτελεσμάτων Χρήση %d για μορφοποίηση σε int System.out.printf( "Sum is %d\n: ", ( number1 + number2 ) ); Οι υπολογισμοί μπορούν να γίνουν εντός της printf Οι παρενθέσεις για την έκφραση number1 + number2 δεν είναι απαραίτητες Άσκηση! Αντίστοιχα με την πρόσθεση 2 ακεραίων, γράψτε ένα ολοκληρωμένο πρόγραμμα που υπολογίζει και προβάλει το γινόμενο τριών ακεραίων!
Διαίρεση Η διαίρεση ( / ) λειτουργεί διαφορετικά σε integers και doubles! Παράδειγμα: double a = 5.0/2.0; int b = 4/2; int c = 5/2; double d = 5/2; // a = 2.5 // b = 2 // c = 2 // d = 2.0
Προτεραιότητα πράξεων Από αριστερά προς δεξιά Το δεξί μέρος του = υπολογίζεται πρώτα Παράδειγμα: double x = 3 / 2 + 1; double y = 3 / (2 + 1); // x = 2.0 // y = 1.0
Mismatched Types Η Java πάντα ελέγχει ότι οι τύποι ταιριάζουν: String five = 5; // ERROR! test.java.2: incompatible types found: int required: java.lang.string String five = 5;
Μετατροπή με casting int a = 2; // a = 2 double a = 2; // a = 2.0 (Implicit) int a = 18.7; // ERROR int a = (int)18.7; // a = 18 double a = 2/3; // a = 0.0 double a = (double)2/3; // a = 0.6666.
Methods
Προσθήκη μεθόδων public static void NAME() { } STATEMENTS Για την κλήση μιας μεθόδου: NAME();
Προσθήκη μεθόδων class NewLine { public static void newline() { System.out.println(""); } public static void threelines() { } newline(); newline(); newline(); } public static void main(string[] arguments){ System.out.println("Line 1"); threelines(); System.out.println("Line 2"); }
Παράμετροι public static void NAME(TYPE NAME) { } STATEMENTS Για την κλήση: NAME(EXPRESSION);
Προσθήκη μεθόδων class Square { public static void printsquare(int x){ System.out.println(x*x); } } public static void main(string[] arguments){ int value = 2; printsquare(value); printsquare(3); printsquare(value*2); }
What s wrong here? class Square2 { public static void printsquare(int x){ System.out.println(x*x); } } public static void main(string[] arguments){ printsquare( hello ); printsquare(5.5); }
Πολλαπλές παράμετροι [ ] NAME(TYPE NAME, TYPE NAME) { } STATEMENTS Για την κλήση: NAME(ΑRG1, ARG2);
Προσθήκη μεθόδων class Multiply { public static void times (int a, int b){ System.out.println(a * b); } } public static void main(string[] arguments){ times (2, 2); times (3, 4); }
Τιμές επιστροφής public static TYPE NAME( ) { STATEMENTS return EXPRESSION; } void: σημαίνει no type
Τιμές επιστροφής class Square3 { public static void printsquare(int x){ System.out.println(x*x); } } public static void main(string[] arguments){ } printsquare(5);
Τιμές επιστροφής class Square4 { public static double square(int x){ return x*x; } } public static void main(string[] arguments){ } System.out.println(square(5)); System.out.println(square(2));
Methods: Building Blocks Τα μεγάλα προγράμματα χτίζονται με μικρές μεθόδους Οι μέθοδοι μπορούν να αναπτυχθούν, ελεγχθούν και ξαναχρησιμοποιηθούν ανεξάρτητα Ο χρήστης της μεθόδου δεν χρειάζεται να ξέρει πώς δουλεύει! Αυτό στην Επιστήμη των Υπολογιστών, ονομάζεται abstraction (αφαίρεση)
Εμφάνιση κειμένου σε παράθυρο διαλόγου Εμφάνιση Οι περισσότερες εφαρμογές Java χρησιμοποιούν παράθυρα ή dialog boxes Μέχρι τώρα χρησιμοποιήσαμε command prompt Η κλάση JOptionPane επιτρέπει τη χρήση dialog boxes Η JOptionPane βρίσκεται στο πακέτο javax.swing Το πακέτο γενικά περιέχει κλάσεις για τη χρήση γραφικών διεπαφών χρήστη (Graphical User Interfaces GUIs)
1 // Welcome4.java 2 // Printing multiple lines in a dialog box. 3 Εμφάνιση κειμένου σε 4 // Java packages 5 import javax.swing.joptionpane; // program uses JOptionPane 6 παράθυρο διαλόγου 7 public class Welcome4 { 8 9 // main method begins execution of Java application 10 public static void main( String args[] ) 11 { 12 JOptionPane.showMessageDialog( 13 null, "Welcome\nto\nJava\nProgramming!" ); 14 15 System.exit(0); // terminate application with window 16 17 } // end method main 18 19 } // end class Welcome4
Εμφάνιση κειμένου σε παράθυρο διαλόγου 4 // Java packages 2 ομάδες πακέτων στο Java API Core packages Ξεκινούν με java Extension packages Ξεκινούν με javax 5 import javax.swing.joptionpane; // program uses OptionPane import δήλωση Όπως είπαμε χρησιμοποιείται από τον compiler για να αναγνωρίσει και να εντοπίσει κλάσεις Εδώ λέει στον compiler να φορτώσει την κλάση JOptionPane από το πακέτο javax.swing
Εμφάνιση κειμένου σε παράθυρο διαλόγου 12 JOptionPane.showMessageDialog( 13 null, "Welcome\nto\nJava\nProgramming!" ); Κλήση μεθόδου showmessagedialog της κλάσης JOptionPane Απαιτεί 2 ορίσματα Πολαπλλά ορίσματα χωρίζονται με (,) Για την ώρα, το 1ο όρισμα θα είναι πάντα null Το 2ο όρισμα είναι το string προς εμφάνιση Η showmessagedialog είνα μία static μέθοδος τη κλάσης JOptionPane Κλήση με το όνομα της κλάσης, τελεία (dot.) και μετά το όνομα της μεθόδου Δεν χρειάζεται στιγμιότυπο της κλάσης
Εμφάνιση κειμένου σε παράθυρο διαλόγου Η εκτέλεση των γραμμών 12 και 13 εμφανίζει το dialog box Αυτόματα περιλαμβάνει το κουμπί ΟΚ (OK button) Κρύβει το dialog box Ο τίτλος του παραθύρου έχει το string Message
Εμφάνιση κειμένου σε παράθυρο διαλόγου 15 System.exit(0); // terminate application with window Καλεί τη static μέθοδο exit της κλάσης System Τερματίζει την εφαρμογή Χρήση με κάθε εφαρμογή που εμφανίζει ένα GUI Το όρισμα 0 σημαίνει ότι η εφαρμογή τερματίστηκε επιτυχώς Συνήθως αν είναι μη-μηδέν σημαίνει ότι συνέβη κάποιο σφάλμα ΕΡΩΤΗΣΗ: Σε ποιο πακέτο βρίσκεται η System??? ΑΠΑΝΤΗΣΗ: Η κλάση System ανήκει στο πακέτο java.lang Δε χρειάζεται δήλωση import Το java.lang εισάγεται (imported) φορτώνεται αυτόματα σε κάθε πρόγραμμα Java
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων Χρήση input dialogs για εισαγωγή 2 τιμών από το χρήστη με τη χρήση της μεθόδου JOptionPane.showInputDialog Χρήση message dialog για εμφάνιση του αθροίσματος των δύο τιμών με τη χρήση της μεθόδου JOptionPane.showMessageDialog
1 // AdditionΑ.java 2 // Addition program that displays the sum of two numbers. 3 4 Άλλο // Java packages ένα παράδειγμα: 5 import javax.swing.joptionpane; // program uses JOptionPane 6 7 public class AdditionΑ { πρόσθεση ακεραίων 8 9 // main method begins execution of Java application 10 public static void main( String args[] ) 11 { 12 String firstnumber; // first string entered by user 13 String secondnumber; // second string entered by user 14 15 int number1; // first number to add 16 int number2; // second number to add 17 int sum; // sum of number1 and number2 18 19 // read in first number from user as a String 20 firstnumber = JOptionPane.showInputDialog( "Enter first integer" ); 21 22 // read in second number from user as a String 23 secondnumber = 24 JOptionPane.showInputDialog( "Enter second integer" ); 25 26 // convert numbers from type String to type int 27 number1 = Integer.parseInt( firstnumber ); 28 number2 = Integer.parseInt( secondnumber ); 29 30 // add numbers 31 sum = number1 + number2; 32 Πρόσθεση, τοποθέτηση του αποτελέσματος στη sum. Δήλωση μεταβλητών : όνομα και τύπος Εισαγωγή 1 ου ακέραιου ως String, ανάθεση στον firstnumber. 04/04/2008 Αντικειμενοστρεφής Προγραμματισμός Μετατροπή strings σε integers. Τμήμα Διδακτικής της Τεχνολογίας & Ψηφιακών Συστημάτων
33 // display result 34 JOptionPane.showMessageDialog( null, "The sum is " + sum, Άλλο ένα παράδειγμα: 35 "Results", JOptionPane.PLAIN_MESSAGE ); 36 πρόσθεση ακεραίων 37 System.exit( 0 ); // terminate application with window 38 39 } // end method main 40 41 } // end class AdditionΑ
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 5 import javax.swing.joptionpane; // program uses JOptionPane Θέση της JOptionPane για χρήση από το πρόγραμμα 7 public class AdditionΑ { Εκκίνηση public κλάσης AdditionΑ ΘΥΜΗΘΕΙΤΕ ότι το όνομα του αρχείου πρέπει να είναι AdditionΑ.java 12 String firstnumber; // first string entered by user 13 String secondnumber; // second string entered by user Δήλωση firstnumber και secondnumber είναι μεταβλητές
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 12 String firstnumber; // first string entered by user 13 String secondnumber; // second string entered by user Μεταβλητές Θέση στη μνήμη που αποθηκεύει μια τιμή Declare with name and type before use Οι firstnumber και secondnumber είναι τύπου String (package java.lang) Κρατά strings Όνομα μεταβλητής: ο,τιδήποτε Οι δηλώσεις τερματίζουν με ;
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 15 int number1; // first number to add 16 int number2; // second number to add 17 int sum; // sum of number1 and number2 Δηλώσεις μεταβλητών int holds integer values
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 20 firstnumber = JOptionPane.showInputDialog( "Enter first integer" ); Διαβάζει ένα String από το χρήστη, που αντιστοιχεί στον πρώτο προσθετέο Η μέθοδος JOptionPane.showInputDialog εμφανίζει το ακόλουθο: Καλείται ένα prompt κατευθύνει το χρήστη να κάνει μια ενέργεια Το όρισμα εμφανίζεται ως κείμενο στο prompt Αν εισαχθεί λάθος τύπος δεδομένων (π.χ. non-integer) ή πατήσουμε Cancel, συμβαίνει σφάλμα
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 20 firstnumber = JOptionPane.showInputDialog( "Enter first integer" ); Το αποτέλεσμα της κλήσης showinputdialog δίνεται στο firstnumber με χρήση του τελεστή = Δηλ.: Ο firstnumber παίρνει την τιμή που επιστρέφει η JOptionPane.showInputDialog( "Enter first integer" )
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 23 secondnumber = 24 JOptionPane.showInputDialog( "Enter second integer" ); Όπως πριν για τον secondnumber 27 number1 = Integer.parseInt( firstnumber ); 28 number2 = Integer.parseInt( secondnumber ); Μέθοδος Integer.parseInt Μετατρέπει το όρισμα String σε έναν ακέραιο (type int) Η κλάση Integer είναι στο πακέτο java.lang Ο ακέραιος που επιστρέφεται από την κλήση Integer.parseInt ανατίθεται στη μεταβλητή number1 (line 27) Θυμηθείτε ότι για number1 δηλώθηκε ως type int Ομοίως για τη γραμμή 28
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 31 sum = number1 + number2; Προφανές
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 34 JOptionPane.showMessageDialog( null, "The sum is " + sum, 35 "Results", JOptionPane.PLAIN_MESSAGE ); Χρήση της showmessagedialog για εμφάνιση αποτελεσμάτων "The sum is " + sum Χρησιμοποιεί τον τελεστή + για να «προσθέσει-ενώσει» τα "The sum is" και sum Αλληλουχία (Concatenation) ενός String και ενός άλλου τύπου Αποτέλεσμα = νέο string Αν η sum περιέχει το 117, τότε "The sum is " + sum δίνει το νέο string "The sum is 117" Προσοχή στο κενό (space) στο "The sum is "
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων 34 JOptionPane.showMessageDialog( null, "The sum is " + sum, 35 "Results", JOptionPane.PLAIN_MESSAGE ); Άλλη έκδοση της showmessagedialog Απαιτεί 4 ορίσματα (αντί για 2 όπως πριν) 1 ο όρισμα: για τώρα null 2 ο όρισμα: string προς εμφάνιση 3 ο όρισμα: string στο title bar 4 ο όρισμα: τύπος μηνύματος με ή χωρίς εικόνα (icon) Γραμμή Line 35 χωρίς εικόνα : JOptionPane.PLAIN_MESSAGE
Άλλο ένα παράδειγμα: πρόσθεση ακεραίων Message dialog type Icon Description JOptionPane.ERROR_MESSAGE JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE JOptionPane.QUESTION_MESSAGE Displays a dialog that indicates an error to the user. Displays a dialog with an informational message to the user. The user can simply dismiss the dialog. Displays a dialog that warns the user of a potential problem. Displays a dialog that poses a question to the user. This dialog normally requires a response, such as clicking on a Yes or a No button. JOptionPane.PLAIN_MESSAGE no icon Displays a dialog that simply contains a message, with no icon.
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.
Αποφυγή λαθών Όταν εκτελείται διαίρεση με μία έκφραση που θα μπορούσε να είναι και μηδέν, πρέπει να ελέγχουμε σαφώς την πιθανότητα αυτή και να τη διαχειριζόμαστε ανάλογα στο πρόγραμμά μας (π.χ. Εκτυπώνοντας ένα μήνυμα σφάλματος)
Πηγές/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