Προγραµµατισµός µε Java 0
Ε ι σ α γ ω γ ή
Προγραµµατισµός µε Java 1
Ε ι σ α γ ω γ ή
Πρόλογος
Οι σηµειώσεις αυτές βασίζονται στην εµπειρία που έχουµε
αντλήσει επί σειρά ετών από την διδασκαλία µας σε τµήµατα
ΑΕΙ – ΤΕΙ και ΕΑΠ.
Θεσσαλονίκη Φεβρουάριος 2003
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java 2
Ε ι σ α γ ω γ ή
Ε ι σ α γ ω γ ή
Η γλώσσα προγραµµατισµού Java είναι µία γλώσσα προγραµµατισµού που αναπτύσσεται πολύ γρήγορα. Κυκλοφόρησε σε πρώτη έκδοση το 1991 και έχει ήδη φθάσει στην 4η έκδοση της. Αποτελεί µία πλατφόρµα προγραµµατισµού ανεξάρτητη από τα διαφορετικά λειτουργικά συστήµατα και για τον λόγο αυτό χρησιµοποιείται περισσότερο σε Internet εφαρµογές. Είναι απλή, αντικειµενοστραφής, παρέχει ασφάλεια στις εφαρµογές και επειδή είναι ανεξάρτητη από τα διαφορετικά λειτουργικά συστήµατα, χρησιµοποιείται για εφαρµογές που δεν θα µπορούσαν να γίνουν µε τις λοιπές παραδοσιακές γλώσσες προγραµµατισµού.Αντικειµενοστραφής προγραµµατισµός (Object Oriented Programming – OOP), είναι ο προγραµµατισµός που χρησιµοποιεί σύνολα προγραµµατιστικών ενοτήτων που ονοµάζονται συστατικά ή αντικείµενα (objects). Τα αντικείµενα υφίστανται και δρουν ανεξάρτητα. Τα αντικείµενα επικοινωνούν µεταξύ τους αλλά και µε το περιβάλλον για να εκτελούν διάφορες εργασίες. Η δύναµη της Java δηλαδή, η ασφάλεια των εφαρµογών αλλά και η ανεξαρτησία της από τα διαφορετικά λειτουργικά συστήµατα, είναι ο Bytecode. Ο Bytecode είναι ο ενδιάµεσος κώδικας που παράγεται κατά την µεταγλώττιση του προγράµµατος και εκτελείται από τον διερµηνέα της ( Java Virtual Machine - JVM ). Με την δοµή αυτή επιτυγχάνεται η ασφαλής διακίνηση των εφαρµογών µέσα στο Internet αλλά και η εκτέλεση τους σε διαφορετικά λειτουργικά συστήµατα αρκεί να υπάρχει ο διερµηνέας της Java στα συστήµατα αυτά. Στο εγχειρίδιο αυτό θα µάθουµε να χρησιµοποιούµε την Java στην επίλυση προβληµάτων προγραµµατισµού, ξεκινώντας από τα πλέον απλά δηλαδή, της εκτέλεσης αριθµητικών πράξεων και εµβαθύνοντας σε δυσκολότερες έννοιες, όπως των αντικειµένων και των applets (προγράµµατα που µεταφέρονται µέσα από το Internet και εκτελούνται σε αυτό). Τα προγράµµατα στην Java είναι αρχεία κειµένου, που γράφονται σε απλούς επεξεργαστές. Τα προγράµµατα πρώτα µεταγλωττίζονται µε την κλήση του µεταγλωττιστή - javac και στην συνέχεια εκτελούνται στον διερµηνέα – java στη γραµµή εντολών. Η σύνταξη των προγραµµάτων πρέπει να γίνεται µε ιδιαίτερη προσοχή. Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
3
Το πρώτο µας πρόγραµµαΟι εργασίες εγκατάστασης
• Το Java Development Kit (JDK) είναι µια συλλογή προγραµµάτων που µπορούµε να ‘κατεβάσουµε’ χωρίς κόστος από την ιστοσελίδα της εταιρίας Sun (java.sun.com). Το πακέτο έρχεται µε όνοµα jdk1_x_x-XXX-win.exe,
όπου τα x αντιπροσωπεύουν αριθµούς της τρέχουσας έκδοσης. Μετά πρέπει να κατεβάσουµε το εγχειρίδιο χρήσης που έρχεται σε συµπιεσµένη µορφή και µε το αντίστοιχο όνοµα jdk1_x_x-XXX-doc.zip. Το αρχείο αυτό πρέπει να το αποσυµπιέσουµε (unzip), ώστε να µπορέσουµε να διαβάσουµε τις οδηγίες και αντίστοιχες πληροφορίες της java.
Το πρώτο µας Πρόγραµµα
• Το παρακάτω απλό πρόγραµµα θα εµφανίσει στην οθόνη το µήνυµα : Hello Java. /* Αυτό είναι ένα απλό πρόγραµµα στη Java Το όνοµα του αρχείου είναι Hello.java */ class Hello { // Το πρόγραµµα αρχίζει µε µία κλήση στη main() public static void main(String args[]){ System.out.println("Hello Java"); } } • Για να γράψουµε τον ανωτέρω κώδικα σε ένα απλό κειµενογράφο πρέπει να κάνουµε τα παρακάτω βήµατα:
¾ Πρώτα πηγαίνουµε σε παράθυρο του DOS (MS - DOS Prompt). Μετά πηγαίνουµε σε ένα κατάλογο όπου θα αποθηκεύουµε και θα εκτελούµε
Προγραµµατισµός µε Java
4
Το πρώτο µας πρόγραµµατα προγράµµατά µας. Αν δεν υπάρχει τέτοιος κατάλογος τον δηµιουργούµε.
¾ Μετά καλούµε ένα απλό κειµενογράφο, για παράδειγµα τον Notepad, όπου θα γράψουµε το πρόγραµµα. (Programs | Accessories | Notepad).
¾ Γράφουµε το πρόγραµµα.
Προγραµµατισµός µε Java
5
Το πρώτο µας πρόγραµµα¾ Μπορούµε να χρησιµοποιήσουµε και άλλους κειµενογράφους όπως τους Edit, WordPad ή ακόµη και τον Ms – Word, αν αποθηκεύσουµε σωστά το πρόγραµµα δηλαδή, σε text – µορφή και µε κατάληξη java. To πρόγραµµα αυτό λέγεται πηγαίο πρόγραµµα (source program).
¾ Αποθηκεύουµε το πηγαίο πρόγραµµα µε το όνοµα
Hello.java.
¾ Το πηγαίο πρόγραµµα πρέπει πρώτα να µεταγλωττισθεί, ώστε να ελεγχθεί συντακτικά, και η εργασία αυτή γίνεται µε τον µεταγλωττιστή της java (compiler) - τον javac. Για να εκτελεσθεί ο javac πρέπει προηγουµένως να έχει ορισθεί η πλήρης διαδροµή (full path name) δηλαδή, η διαδροµή που θα επιτρέπει στο λειτουργικό σύστηµα να τον καλεί. Για παράδειγµα ορίζουµε την διαδροµή (path):
C:\Jdk1.2.2 \bin
Μεταγλώττιση και εκτέλεση του προγράµµατος
¾ Αν το όνοµα του πηγαίου προγράµµατος είναι Hello.java, τότε η εντολή για την µεταγλώττιση του προγράµµατος θα είναι :C:\>javac Hello.java
¾ Η κατάληξη του προγράµµατος είναι η λέξη java,
δηλαδή η κατάληξη περιέχει 4 - χαρακτήρες που δεν υποστηρίζει το λειτουργικό σύστηµα Dos. Για τον λόγο αυτό η java δεν τρέχει στο Dos, ενώ τρέχει σε περιβάλλον Windows 95 / 98 / και ΝΤ.Προγραµµατισµός µε Java
6
Το πρώτο µας πρόγραµµα ¾ Ο µεταγλωττιστής παράγει το αρχείο:Hello.class.
Το αρχείο αυτό δεν είναι απ’ ευθείας εκτελέσιµο (executable), αλλά ένας ενδιάµεσος κώδικας – ο bytecode – που εκτελείται από τον διερµηνέα της java (Interpreter). ¾ Για να εκτελέσουµε το πρόγραµµα καλούµε τον διερµηνέα της java – (Interpreter) τονjava
µε την παρακάτω εντολή:
C:\>java MyProg
¾ Ο διερµηνέας της java λέγεται Java Virtual Machine (JVM) και εκτελεί τον bytecode – κώδικα. Ο κώδικας αυτός µπορεί να µεταφερθεί σε οποιοδήποτε λειτουργικό σύστηµα αρκεί να περιλαµβάνει τον αντίστοιχο JVM. Η δυνατότητα εκτέλεσης των bytecode – προγραµµάτων της java σε διαφορετικά λειτουργικά συστήµατα την έχει κάνει διάσηµη. Τα προγράµµατα διακινούνται και εκτελούνται µέσα στο Internet. Η εκτέλεση των προγραµµάτων γίνεται από τους πλοηγούς του Internet (Web – Browsers). Τα προγράµµατα αυτά ονοµάζονται applets.
H γενική δοµή του προγράµµατος
/* <σχόλια> */import <java βιβλιοθήκες - Packages>; // <σχόλια>
Προγραµµατισµός µε Java
7
Το πρώτο µας πρόγραµµαpublic class <όνοµα – κλάσης> { <∆ηλώσεις Μεταβλητών>
<∆ηλώσεις Μεθόδων>
public static void main(String[] args) { <εντολές προγράµµατος> } } • Κάθε πρόγραµµα είναι µια µονάδα µεταγλώττισης. • Το πρόγραµµα της Java είναι ένα αρχείο – κειµένου που περιέχει µία ή περισσότερες Κλάσεις. • Κάθε Κλάση περιέχει τις δικές της εντολές προγράµµατος. • Στη χρήση των ονοµάτων πρέπει να λαµβάνεται υπόψη η διαφορά των κεφαλαίων και µικρών γραµµάτων.
Μία δεύτερη µατιά στο πρόγραµµα
• Σχόλια προγράµµατος πολλαπλών γραµµών. Αρχίζουν µε τα σύµβολα/*
και τελειώνουν µε τα σύµβολα*/
.
Τα σχόλια παραβλέπονται από τον µεταγλωτ-τιστή. /* Αυτό είναι ένα απλό πρόγραµµα στη Java Το όνοµα του αρχείου είναι Hello.java */ • Ορισµός της κλάσης του προγάµµατος µε το όνοµα της. Η κλάση αρχίζει µε το άγκιστρο { και κλείνει επίσης µε το άγκιστρο }. class Hello { • Σχόλιο προγράµµατος απλής γραµµής. Αρχίζει µε τα σύµβολα//
και τελειώνει στο τέλος της γραµµής. // Το πρόγραµµα αρχίζει µε µία κλήση στη main() • Εντολή εκκίνησης της εκτέλεσης του προγράµµατος. Κάθε πρόγραµµα στη java καλεί την µέθοδο main(). Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
8
Το πρώτο µας πρόγραµµαpublic static void main(String args[])
• public, καθορίζει ότι το πρόγραµµα θα έχει πρόσβαση στην κλάση – µέλος (καθολική ορατότητα). Το αντίθετο συµβαίνει µε την private, η οποία απαγορεύει την πρόσβαση στον κώδικα της κλάσης – µέλους (τοπική ορατότητα). • static, επιτρέπει στην main() να κληθεί προς εκτέλεση πριν δηµιουργηθεί κάποιο αντικείµενο στην κλάση – µέλος. • void, δηλώνει στον µεταγλωττιστή ότι η main() δεν επιστρέφει κάποια τιµή.
• String args[ ] ή String[ ] args
,
ορίζει ένα πίνακα (array) παραµέτρων µε όνοµα args µε τιµές της κλάσης String. Η args θα πάρει τιµές κατά την εκτέλεση του προγράµµατος (όχι βέβαια στο παράδειγµά µας). • main(), είναι η µέθοδος που καλείται όταν µία εφαρµογή java ξεκινά. Το σώµα της περιέχεται µέσα σε άγκιστρα { }. Η main() είναι το σηµείο εκκίνησης του διερµηνέα. Μία εφαρµογή µπορεί να έχει δεκάδες κλάσεις αλλά µία από αυτές πρέπει να περιέχει την main(). • Η τελευταία εντολή εµφανίζει στην οθόνη το µήνυµα χρησιµοποιώντας την µέθοδο println() και τις System.out που ορίζουν, η µεν πρώτη µία κλάση που παρέχει πρόσβαση στα µέσα του Συστήµατος, ενώ η δεύτερη την δέσµη εξόδου στην οθόνη. System.out.println("Hello Java"); • Η εντολή τελειώνει µε το semicolon (;
). Όλες οι εντολές της java τελειώνουν µε το σύµβολο αυτό. • Το πρώτο άγκιστρο κλείνει την main(), ενώ το δεύτερο την κλάση Hello. • Όταν το πρόγραµµα είναι µικρό περιέχει συνήθως µία κλάση. Στην περίπτωση αυτή θα πρέπει το όνοµα του πηγαίου κώδικα να είναι απόλυτα ίδιο µε το όνοµα της κλάσης. Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
9
Το πρώτο µας πρόγραµµα • Προσέξτε για µία ακόµη φορά τον τρόπο σύνταξης των στοιχείων του προγράµµατος καθώς η java τα λαµβάνει σοβαρά υπ’ όψιν και επιστρέφει λάθος αν δεν ακολουθήσουµε τους κανόνες σύνταξης. Αν κάνουµε κάποιο συντακτικό λάθος θα το διορθώσουµε χρησιµοποιώντας ξανά τον κειµενογράφο.Ο κύκλος Γράψε, Μεταγλώττισε, Εκτέλεσε..
1. Γράψε το πρόγραµµα στο Notepad. 2. Αποθήκευσε το πρόγραµµα µε την εντολή Save As. 3. Μεταγλώττισε το πρόγραµµα µε την εντολή javac. 4. Αν έχουµε συντακτικά λάθη πηγαίνουµε στο βήµα 1. 5. Εκτέλεσε το πρόγραµµα µε την εντολή java. 6. Αν έχουµε λάθη πηγαίνουµε στο βήµα 1, ενώ αν εκτελείται σωστά τότε τελειώνουµε.Παραλλαγή του προγράµµατος Hello
• Στην παραλλαγή θα περάσουµε µε παράµετρο το δεύτερο συνθετικό όνοµα της εµφάνισης του µηνύµατος. Προσέξτε την σύνταξη της args. Η πρώτη παράµετρος κατέχει την θέση 0 στη λίστα των παραµέτρων. /* Αυτό είναι ένα απλό πρόγραµµα στη Java Το όνοµα του αρχείου είναι Hello.java */ class Hello { // Το πρόγραµµα αρχίζει µε µία κλήση στη main() public static void main(String args[]){
System.out.println("Hello " + args[0]); } }
Προγραµµατισµός µε Java
10
Το πρώτο µας πρόγραµµαΑν εκτελέσουµε το πρόγραµµα θα πάρουµε το αποτέλεσµα:
C:\>javac Hello.java C:\>java Hello Java Hello Java
Προγραµµατισµός µε Java
11
∆εδοµένα – Τελεστές - Μεταβλητές
Αρχικοί τύποι δεδοµένων
Ακέραιοι και ∆εκαδικοί
Αρχικοί τύποι Ακεραίων (Integer)Τύπος Μέγεθος Όρια τιµών
Byte 8 bits -128 to +127 Short 16 bits -32,768 to +32,767Int 32 bits (περίπου)-2 billion to +2 billion Long 64 bits (περίπου)-10E18 to +10E18
Αρχικοί τύποι ∆εκαδικών (Floating Point)
Τύπος Μέγεθος
Όρια τιµών
float 32 bits -3.4E+38 to +3.4E+38 double 64 bits -1.7E+308 to 1.7E+308
• Γράφουµε ακέραιους : 123, 0, -34
(Integer literals,
χωρίς υποδιαστολή).• Γράφουµε δεκαδικούς µε τα δεκαδικά ψηφία να χωρίζονται µε την τελεία :
123.0 -123.5 -198234.234 0.00000381
• Γράφουµε επίσης δεκαδικούς µε επιστηµονική µορφή (scientific
notation) χρησιµοποιώντας το E δηλαδή, 10 εις την δύναµη :
1.23E+02 -1.235E+02 -1.98234234E+05 3.81E-06
Για παράδειγµα ο αριθµός
1.2345E+03
είναι ο1234.5
σε κανονική µορφή.Προγραµµατισµός µε Java
12
∆εδοµένα – Τελεστές - Μεταβλητές
Ακρίβεια δεκαδικών αριθµών
• Ο τύπος δεδοµένων float έχει ακρίβεια 7 - δεκαδικών ψηφίων. • Ο τύπος δεδοµένων double έχει ακρίβεια περίπου 15 - δεκαδικών ψηφίων. Αν γράψουµε τον αριθµό 1.2345 θα θεωρηθεί του τύπου double και είναι ο τύπος που θα χρησιµοποιούµε για δεκαδικούς αριθµούς.Ο αρχικός τύπος char
• Η java χρησιµοποιεί 16 – bits για την απεικόνιση ενός χαρακτήρα. Συνήθως χρησιµοποιούνται 8 – bits για απεικόνιση Αγγλικών χαρακτήρων και 16 – bits για χαρακτήρες άλλων γλωσσών. Η µέθοδος αυτή καλείται Unicode. Χαρακτήρες θεωρούνται επίσης τα σηµεία στίξης και το κενό διάστηµα. Τα κεφαλαία και τα πεζά γράµµατα θεωρούνται τελείως διαφορετικοί χαρακτήρες γι’ αυτό πρέπει να προσέχουµε ιδιαίτερα κατά τη σύνταξη των προγραµµάτων.•
Ένας χαρακτήρας γράφεται µέσα σε αποστρόφους ‘’. Για παράδειγµα ‘Α’, ‘ο’. Υπάρχουν και οι ‘controle’ - χαρακτήρες ή χαρακτήρες εντολών που συντάσσονται µε ιδικό τρόπο : '\n' '\t' '\377'Ο αρχικός τύπος boolean
• Αντιπροσωπεύει µια απλή τιµή αλήθειας ή ψεύδους (true | false).H κλάση string
• Κάθε αλυσίδα χαρακτήρων (string) είναι ένα αντικείµενο, ακόµη και οι σταθερές τύπου string. Είδαµε τις σταθερές τύπου string στην εντολή:System.out.println(“Hello Java”);
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
13
∆εδοµένα – Τελεστές - Μεταβλητές
• Επειδή τα strings είναι αντικείµενα δεν µπορούν να µεταβληθούν απ’ ευθείας. Θα πρέπει να δηµιουργήσουµε ένα νέο string που θα περιέχει τις µεταβολές ή θα χρησιµοποιήσουµε την κλάση StringBuffer που επιτρέπει τις αλλαγές. • Η java ορίζει ένα τελεστή για τη συνένωση (concatenation) των strings, τον
τελεστή
+ .
Αριθµητικοί τελεστές
Τελεστής Εκτέλεση Πράξης - Πρόσηµο µείον - minus + Πρόσηµο συν – plus * Πολλαπλασιασµός / ∆ιαίρεση % Υπόλοιπο + Πρόσθεση - Αφαίρεση∆ήλωση Σταθερών (Constants)
• Χρησιµοποιώντας την δεσµευµένη λέξηfinal
µπορούµε να δηλώσουµε σταθερές τιµές µέσα στο πρόγραµµα δηλαδή, τιµές που δεν θα αλλάξουν κατά την εκτέλεση του προγράµµατος. class YpologismosFPA {public static void main ( String[] arg ) {
final double SYNTELESTIS1 = 0.06; final double SYNTELESTIS2 = 0.18;
. . . }
}
Προγραµµατισµός µε Java
14
∆εδοµένα – Τελεστές - Μεταβλητές
Μεταβλητές (variables)
• Μεταβλητή, είναι ένας χώρος της µνήµης που θα πάρει τιµή µέσα στο πρόγραµµα ή κατά την εκτέλεση του προγράµµατος. Η µεταβλητή µπορεί να αλλάξει τιµή µέσα στο πρόγραµµα. • Πριν χρησιµοποιήσουµε µία µεταβλητή θα πρέπει να ορίσουµε το όνοµα και τον τύπο των δεδοµένων που θα λάβει.Ονόµατα Μεταβλητών
• Το όνοµα της µεταβλητής αρχίζει µε ένα γράµµα, την underscore (_
) ή το$
και µπορεί να περιέχει συνδυασµούς γραµµάτων και αριθµών. • Ένα πρόγραµµα αναφέρεται στην τιµή µιας µεταβλητής, χρησιµοποιώντας το όνοµα της. Το όνοµα της µεταβλητής πρέπει να αποτελείται από σειρές καταλ-λήλων Unicode χαρακτήρων, δηλαδή το σύστηµα κωδικοποίησης χαρακτήρων που υποστηρίζει κείµενο σε διαφορετικές γλώσσες όπως Ελληνική, Ιαπωνική, Εβραϊκή κ.ά. • Το όνοµα της µεταβλητής : 9 ∆εν πρέπει να είναι δεσµευµένη λέξη. 9 Πρέπει να είναι µοναδικό µέσα στο µπλόκ προγράµµατος που ορίζεται – scope.Ασκήσεις µε χρήση Μεταβλητών
Στο παρακάτω παράδειγµα: • ορίζουµε δύο µεταβλητές τις ar1 και ar2 • στη συνέχεια δίνουµε τιµές στις µεταβλητές • εκτελούµε απλές πράξεις • εµφανίζουµε τα αποτελέσµατα class Example1 {public static void main(String args[]) {
int ar1; //Ορίζει τη µεταβλητή ar1 που θα πάρει ακέραια τιµή
Προγραµµατισµός µε Java
15
∆εδοµένα – Τελεστές - Μεταβλητές
int ar2; //Ορίζει τη µεταβλητή ar2 που θα πάρει ακέραια τιµή
ar1 = 45; // δίνουµε στη ar1 την τιµή 45 ar2 = 20; // δίνουµε στη ar2 την τιµή 20 System.out.println("Arithmos1 : " + ar1); System.out.println("Arithmos2 : " + ar2); ar1 = ar1 * 2; ar2 = ar2 * 3; System.out.print("Apotelesma1 : ar1 * 2 = "); System.out.println(ar1); System.out.print("Apotelesma2 : ar2 * 3 = "); System.out.println(ar2); } } • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: Arithmos1 : 45 Arithmos2 : 20 Apotelesma1 : ar1 * 2 = 90 Apotelesma2 : ar2 * 3 = 60
Εκτέλεση Πράξεων
Κατανόηση της χρήσης των τελεστών
• Στην παρακάτω άσκηση θα δούµε την χρήση των τελεστών :++x , x++, +x
και x+.
class IncDec {public static void main(String args[]) { int x = 8, y = 13;
System.out.println("x = " + x);
Προγραµµατισµός µε Java
16
∆εδοµένα – Τελεστές - Μεταβλητές System.out.println("y = " + y); System.out.println("++x = " + ++x); System.out.println("y++ = " + y++); System.out.println("x = " + x); System.out.println("y = " + y); } } • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: x = 8 y = 13 ++x = 9 y++ = 13 x = 9 y = 14 • Εκτέλεση απλών αριθµητικών πράξεων. Ένα πρώτο απλό παράδειγµα µε ακέραιους αριθµούς: class Arithmetic {
public static void main(String args[]) { int x = 17, y = 5; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("x + y = " + (x + y)); System.out.println("x - y = " + (x - y)); System.out.println("x * y = " + (x * y)); System.out.println("x / y = " + (x / y)); System.out.println("x % y = " + (x % y)); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: x = 17 y = 5 x + y = 22 x - y = 12 x * y = 85 x / y = 3 x % y = 2 Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
17
∆εδοµένα – Τελεστές - Μεταβλητές • Εκτέλεση απλών αριθµητικών πράξεων. Ένα δεύτερο απλό παράδειγµα µε πραγµατικούς αριθµούς: class FloatMath {
public static void main(String args[]) { float x = 23.5F, y = 7.3F; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("x + y = " + (x + y)); System.out.println("x - y = " + (x - y)); System.out.println("x * y = " + (x * y)); System.out.println("x / y = " + (x / y)); System.out.println("x % y = " + (x % y)); } } • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: x = 23.5 y = 7.3 x + y = 30.8 x - y = 16.2 x * y = 171.55 x / y = 3.219178 x % y = 1.5999994
Ανάλυση της εκτέλεσης αριθµητικών πράξεων
Πρόσθεση και αφαίρεση ακεραίων - Int
Στο παρακάτω παράδειγµα: • Ορίζουµε τρεις ακέραιες µεταβλητές a, b, c. ∆ίνουµε τιµές στις a = 1 και b = 2 Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
18
∆εδοµένα – Τελεστές - Μεταβλητές • Εκτελούµε πρόσθεση και αφαίρεση των αριθµών a και b και τοποθετούµε το αποτέλεσµα στη µεταβλητή c. • Τέλος εµφανίζουµε τα αποτελέσµατα. class Example2 {
public static void main(String args[]) { int a = 1; int b = 2; int c; System.out.println("a = " + a); System.out.println("b = " + b); c = a + b; System.out.println("a + b = " + c); c = a - b; System.out.println("a - b = " + c); } } • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: a = 1 b = 2 a + b = 3 a - b = -1
Πρόσθεση και αφαίρεση πραγµατικών - Double
Στο παρακάτω παράδειγµα: • Ορίζουµε τρεις µεταβλητές, που θα πάρουν πραγµατικές τιµές, τις a, b, c. ∆ίνουµε τιµές στις a = 8.5 και b = 6.5 • Εκτελούµε πρόσθεση και αφαίρεση των αριθµών a και b και τοποθετούµε το αποτέλεσµα στη µεταβλητή c. • Τέλος εµφανίζουµε τα αποτελέσµατα. Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
19
∆εδοµένα – Τελεστές - Μεταβλητές
class Example3 {
public static void main(String args[]) { double a = 8.5; double b = 6.5; double c; System.out.println("a = " + a); System.out.println("b = " + b); c = a + b; System.out.println("a + b = " + c); c = a - b; System.out.println("a - b = " + c); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: a = 8.5 b = 6.5 a + b = 15.0 a - b = 2.0
Πολλαπλασιασµός και ∆ιαίρεση ακεραίων
Στο παρακάτω παράδειγµα: • Ορίζουµε τρεις ακέραιες µεταβλητές a, b, c. ∆ίνουµε τιµές στις : a = 20 και b = 2 • Εκτελούµε πολλαπλασιασµό και διαίρεση των αριθµών a και b και τοποθετού-µε το αποτέλεσµα στη τοποθετού-µεταβλητή c. • Τέλος εµφανίζουµε τα αποτελέσµατα. Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
20
∆εδοµένα – Τελεστές - Μεταβλητές
class Example4 {
public static void main(String args[]) { int a = 20; int b = 2; int c; System.out.println("a = " + a); System.out.println("b = " + b); c = a/b; System.out.println("a / b = " + c); c = a * b; System.out.println("a * b = " + c); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: a = 20 b = 2 a / b = 10 a * b = 40
Ο Τελεστής - υπόλοιπο διαίρεσης (%)
Στο παρακάτω παράδειγµα: • Ορίζουµε τρεις ακέραιες µεταβλητές a, b, c. ∆ίνουµε τιµές στις : a = 10 και b = 3 • Εκτελούµε την διαίρεση των αριθµών a και b µε τον τελεστή % και τοποθετούµε το αποτέλεσµα στη µεταβλητή c. • Τέλος εµφανίζουµε τα αποτελέσµατα. Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
21
∆εδοµένα – Τελεστές - Μεταβλητές
class Example5 {
public static void main(String args[]) { int a = 10; int b = 3; int c; System.out.println("a = " + a); System.out.println("b = " + b); c = a
%
b; System.out.println("a % b = " + c); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τo αποτέλεσµα: a = 10 b = 3 a%
b = 1Πράξεις µε µεικτούς τύπους
class Example6 {public static void main(String[] args) { //Μεταβλητές διάφορων τύπων int i = 37; int j = 42; double x = 27.475; double y = 7.22; //Πρόσθεση αριθµών System.out.println("Adding..."); System.out.println(" i + j = " + (i + j)); System.out.println(" x + y = " + (x + y)); //Αφαίρεση αριθµών System.out.println("Subtracting..."); System.out.println(" i - j = " + (i - j)); System.out.println(" x - y = " + (x - y)); //Πολλαπλασιασµός αριθµών System.out.println("Multiplying..."); Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
22
∆εδοµένα – Τελεστές - Μεταβλητές System.out.println(" i * j = " + (i * j)); System.out.println(" x * y = " + (x * y)); //∆ιαίρεση αριθµών System.out.println("Dividing..."); System.out.println(" i / j = " + (i / j)); System.out.println(" x / y = " + (x / y)); //Υπολογισµός υπολοίπου διαίρεσης
System.out.println("Computing the remainder..."); System.out.println(" i % j = " + (i % j)); System.out.println(" x % y = " + (x % y)); //Μεικτοί τύποι System.out.println("Mixing types..."); System.out.println(" j + y = " + (j + y)); System.out.println(" i * x = " + (i * x)); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: Adding... i + j = 79 x + y = 34.695 Subtracting... i - j = -5 x - y = 20.255000000000003 Multiplying... i * j = 1554 x * y = 198.36950000000002 Dividing... i / j = 0 x / y = 3.805401662049862 Computing the remainder...
i % j = 37 x % y = 5.815000000000002 Mixing types... j + y = 49.22 i * x = 1016.575 Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
23
∆εδοµένα – Τελεστές - Μεταβλητές
Πράξεις µε boolean – τελεστές
• Στην παρακάτω άσκηση θα δούµε την χρήση των λογικών τελεστών και τα αποτελέσµατα διαφόρων συγκρίσεων : class Relational {public static void main(String args[]) { int x = 7, y = 11, z = 11; System.out.println("x = " + x); System.out.println("y = " + y); System.out.println("x < y = " + (x < y)); System.out.println("x > z = " + (x > z)); System.out.println("y <= z = " + (y <= z)); System.out.println("x >= y = " + (x >= y)); System.out.println("y == z = " + (y == z)); System.out.println("x != z = " + (x != z)); } } • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: x = 7 y = 11 x < y = true x > z = false y <= z = true x >= y = false y == z = true x != z = true
String – τελεστές (συνένωση - concatenation)
• Στην παρακάτω άσκηση θα δούµε την συνένωση διαφόρων string : class Concatenation {public static void main (String args[]) {
Προγραµµατισµός µε Java
24
∆εδοµένα – Τελεστές - Μεταβλητές
String firstHalf = "What " + "did "; String secondHalf = "you " + "say?";
System.out.println(firstHalf + secondHalf); }
}
Αν εκτελέσουµε το πρόγραµµα θα πάρουµε το αποτέλεσµα:
What did you say?
Bitwise - λογικοί τελεστές
• Στην παρακάτω θα δούµε τους Bitwise – λογικούς τελεστές :
|
, &,
^
,
~
class BitLogic {
public static void main(String args[]) {
String binary[] = {"0000", "0001", "0010", "0011", "0100", "0101", "0110","0111","1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"}; int a = 3; // 0 + 2 + 1 or 0011 in binary int b = 6; // 4 + 2 + 0 or 0110 in binary int c = a | b; int d = a & b; int e = a ^ b;
int f = (~a & b) | (a & ~b); int g = ~a & 0x0f;
System.out.println(" a = " + binary[a]); System.out.println(" b = " + binary[b]); System.out.println(" a|b = " + binary[c]); System.out.println(" a&b = " + binary[d]); System.out.println(" a^b = " + binary[e]); System.out.println("~a&b|a&~b = " + binary[f]); System.out.println(" ~a = " + binary[g]); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
25
∆εδοµένα – Τελεστές - Μεταβλητές a = 0011 b = 0110 a|b = 0111 a&b = 0010 a^b = 0101 ~a&b|a&~b = 0101 ~a = 1100 • Στο παρακάτω παράδειγµα θα δούµε την χρήση του τελεστή:
<<
class ByteShift {public static void main(String args[]) { byte a = 64, b;
int i; i = a << 2;
b = (byte) (a << 2);
System.out.println("Original value of a: " + a); System.out.println("i and b: " + i + " " + b); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: Original value of a: 64 i and b: 256 0 • Με τον τελεστή
<<
µπορώ εύκολα να διπλασιάσω ένα αριθµό: class MultByTwo {public static void main(String args[]) { int i;
int num = 0xFFFFFFE; for(i=0; i<4; i++) { num = num << 1; System.out.println(num); } } } Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
26
∆εδοµένα – Τελεστές - Μεταβλητές Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: 536870908 1073741816 2147483632 -32 • Οι bitwise – τελεστές έχουν συντµήσεις όπως και οι δεκαδικοί τελεστές. class OpBitEquals {
public static void main(String args[]) { int a = 1; int b = 2; int c = 3; a |= 4; b >>= 1; c <<= 1; a ^= c; System.out.println("a = " + a); System.out.println("b = " + b); System.out.println("c = " + c); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: a = 3 b = 1 c = 6
Μετατροπές τύπων δεδοµένων
Type Conversion and Casting
• Πολλές φορές η τιµή ενός τύπου καταχωρείται σε µεταβλητή άλλου τύπου • Όταν οι τιµές των µεταβλητών είναι συµβατού τύπου, τότε η java κάνει την
µετατροπή αυτόµατα (για παράδειγµα από int σε long).
• Οι επιτρεπτές µετατροπές αρχικών τύπων της java.
Προγραµµατισµός µε Java
27
∆εδοµένα – Τελεστές - Μεταβλητές • Όταν οι τιµές των µεταβλητών δεν είναι συµβατού τύπου, τότε η java κάνει την µετατροπή µε ένα cast: <µεταβλητή> = <επιθυµητός τύπος> τιµή • Το παρακάτω παράδειγµα δείχνει τέτοιες µετατροπές : class Conversion {
public static void main(String args[]) { byte b;
int i = 257;
double d = 323.142;
System.out.println("\nConversion of int to byte."); b = (byte) i;
System.out.println("i and b " + i + " " + b);
System.out.println("\nConversion of double to int."); i = (int) d;
System.out.println("d and i " + d + " " + i);
System.out.println("\nConversion of double to byte."); b = (byte) d;
System.out.println("d and b " + d + " " + b); }
}
• Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα:
Conversion of int to byte. i and b 257 1
Conversion of double to int. d and i 323.142 323
Conversion of double to byte. d and b 323.142 67
Προγραµµατισµός µε Java
28
∆εδοµένα – Τελεστές - Μεταβλητές
Λοιπές ασκήσεις πράξεων και τύπων δεδοµένων
Στην παρακάτω άσκηση θα δούµε τη χρήση της σταθεράς MAX_VALUE που επιστρέφει τη µέγιστη τιµή για ένα τύπο δεδοµένων. class MaxValues {public static void main(String args[]) { // Ακέραιοι
byte largestByte = Byte.MAX_VALUE; short largestShort = Short.MAX_VALUE; int largestInteger = Integer.MAX_VALUE; long largestLong = Long.MAX_VALUE;
// Πραγµατικοί
float largestFloat = Float.MAX_VALUE; double largestDouble = Double.MAX_VALUE; // Άλλοι πρωταρχικοί τύποι
char aChar = 'S'; boolean aBoolean = true; // Εµφάνιση όλων
System.out.println("The largest byte : " + largestByte); System.out.println("The largest short : " + largestShort);
System.out.println("The largest integer : " + largestInteger);
System.out.println("The largest long : " + largestLong); System.out.println("The largest float : " + largestFloat); System.out.println("The largest double : " + largestDouble); if (Character.isUpperCase(aChar)) {
System.out.println("The character " + aChar + " is upper case.");
} else {
System.out.println("The character " + aChar + " is lower case.");
}
System.out.println("The value of aBoolean is " + aBoolean);
} }
Προγραµµατισµός µε Java
29
∆εδοµένα – Τελεστές - Μεταβλητές
• Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα:
The largest byte : 127 The largest short : 32767
The largest integer : 2147483647
The largest long : 9223372036854775807 The largest float : 3.4028235E38
The largest double : 1.7976931348623157E308 The character S is upper case.
The value of aBoolean is true
• Για ακέραιους µε πολλά ψηφία χρησιµοποιούµε τον τύπο long. Στην παρακάτω άσκηση θα υπολογίσουµε την απόσταση που διανύει το φως σε 1000 µέρες, όταν γνωρίζουµε ότι η ταχύτητα του φωτός είναι 186000 µίλια το δευτερόλεπτο και η σχέση υπολογισµού είναι η παρακάτω: Απόσταση = Ταχύτητα * ∆ευτερόλεπτα class Distance {
public static void main(String args[]) { int lightspeed; long days; long seconds; long distance; // Η ταχύτητα του φωτός σε µίλια ανά δευτερόλεπτο lightspeed = 186000; days = 1000; // Ο υπολογισµός για 1000 µέρες seconds = days * 24 * 60 * 60; // µετατροπή σε δευτερόλεπτα
distance = lightspeed * seconds; //υπολογισµός της απόστασης
System.out.print("In " + days);
System.out.print(" days light will travel about "); System.out.println(distance + " miles");
} }
Προγραµµατισµός µε Java
30
∆εδοµένα – Τελεστές - Μεταβλητές
Αν εκτελέσουµε το πρόγραµµα θα πάρουµε το αποτέλεσµα:
In 1000 days light will travel about 16070400000000 miles
• Στην παρακάτω άσκηση θα υπολογίσουµε την ενέργεια ενός Ηλεκτρονίου
σύµφωνα µε την σχέση του Αϊνστάιν E = mc2
class mc2 {
public static void main (String args[]) { double mass = 9.1096E-25;
double c = 2.998E8; double E = mass * c * c; System.out.println(E); } } Αν εκτελέσουµε το πρόγραµµα θα πάρουµε το αποτέλεσµα: 8.18771e-08
Η ανάθεση τιµής - assignment
Το σύµβολο της ανάθεσης τιµής σε µεταβλητές ή σταθερές το είδαµε ήδη από τις προηγούµενες ασκήσεις. Το σύµβολο της ανάθεσης τιµής είναι το απλό ίσον(=)
, όπως και στις περισσότερες γλώσσες προγραµµατισµού. Η γενική µορφή του τελεστή είναι:var = < έκφραση>.
Παράδειγµα int x, y, z; x = y = z = 35; //εκχωρεί την τιµή 35 στις µεταβλητές x, y και z.Ο τελεστής ?
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003•
Είναι ο τελεστής τριών – δρόµων και χρησιµοποιείται για να αντικαταστήσει κάποιες πολλαπλές συγκρίσεις µε τις if – then – else εντολές. Η γενική µορφή του τελεστή είναι:<έκφραση1> ? <έκφραση2> : <έκφραση3>
Προγραµµατισµός µε Java
31
∆εδοµένα – Τελεστές - Μεταβλητές • Η <έκφραση1> είναι µια λογική έκφραση και µπορεί να πάρει τιµή true ή false. Αν η <έκφραση1> επιστρέψει τιµή αλήθειας (true), τότε εκτελείται η <έκφραση2>, διαφορετικά εκτελείται η <έκφραση3>. • Παράδειγµα: z = y == 0 ? 0 : x / y ; Στο ανωτέρω παράδειγµα αν η y είναι 0, τότε εκτελείται η έκφραση µεταξύ του (
?)
και του (:)
δηλαδή, το z =0. Αν η y δεν είναι µηδέν, τότε εκτελείται η έκφραση µετά το (:
) δηλαδή θα εκτελεσθεί η διαίρεση x / y. • Στην παρακάτω άσκηση θα δούµε επίσης τη χρήση του τελεστή ?. class Ternary {public static void main(String args[]) { int i, k; i = 10; k = i < 0 ? -i : i; // απόλυτη τιµή του i System.out.print("Absolute value of "); System.out.println(i + " = " + k); i = -10; k = i < 0 ? -i : i; // απόλυτη τιµή του i System.out.print("Absolute value of "); System.out.println(i + " = " + k); } } • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: Absolute value of 10 = 10 Absolute value of -10 = 10
Προτεραιότητα εκτέλεσης πράξεων
• Η σειρά εκτέλεσης πράξεων σε µία έκφραση γίνεται από αριστερά προς τα δεξιά. Έτσι στη σχέση c = 2 * 6 + 16 / 4 θα παίρναµε πρώτα το 2 * 6 = 12, ύστερα το 12 + 16 = 28, µετά το 28 / 4 = 7 και θα το είχαµε σαν Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
32
∆εδοµένα – Τελεστές - Μεταβλητές τελικό αποτέλεσµα στη µεταβλητή c. Στην πραγµατικότητα το αποτέλεσµα είναι διαφορετικό (2 * 6 = 12, 16 / 4 = 4, 12 + 4 = 16 και τέλος c =16), αν δούµε τις προτεραιότητες στον παρακάτω πίνακα :
() [] .
++ -- ~ !
* / %
+ -
>> >>>
<<
> >=
< <=
== !=
&
^
|
&&
||
?:
= op=
Ασκήσεις
• Ένας υπάλληλος πληρώθηκε για µηνιαίο µισθό: 20 δεκαχίλιαρα, 10 πεντοχίλιαρα, 20 χιλιάρικα, 25 πεντακοσάρικα, 32 εκατοστάρικα και 15 πενηντάρικα. Να υπολογίσετε πόσος είναι τελικά ο µηνιαίος µισθός του υπάλληλου. • Να γίνει το πρόγραµµα που εµφανίζει την καρτέλα µε τα στοιχεία ενός πελάτη µιας επιχείρησης. Τα δεδοµένα για τον πελάτη θα εισαχθούν µέσα στο πρόγραµµα. Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
33
∆εδοµένα – Τελεστές - Μεταβλητές • Να υπολογισθεί και εµφανισθεί η Τελική τιµή ενός προϊόντος όταν γνωρίζουµε ότι η Αρχική του τιµή είναι 1000 ∆ρχµ. και ο συντελεστής Φ.Π.Α είναι 18%. Να υπολογίσετε πρώτα το ποσό Φ.Π.Α (Αρχική τιµή * συντελεστή Φ.Π.Α / 100) και έπειτα την Τελική τιµή ( Αρχική τιµή + Ποσό Φ.Π.Α). • Να γίνει το πρόγραµµα που υπολογίζει τον ακαθάριστο µισθό ενός υπαλλήλου όταν γνωρίζουµε ότι οι µέρες εργασίας του υπαλλήλου είναι 25, το ηµεροµίσθιο 20000, οι υπερωρίες 10 ώρες και τέλος η σχέση υπολογισµού είναι: Ακαθ.Μισθός = Μέρες Εργ. * Ηµεροµίσθιο + 0.2 * Ηµεροµίσθιο * Υπερωρίες Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
34
Εντολές Ελέγχου
Λογικοί τελεστές – boolean
Τελεστής Έλεγχος που εκτελεί A==
B Είναι το A ίσο µε το B ; A<
B Είναι το A µικρότερο του B ; A<=
B Είναι το A µικρότερο ή ίσο του B ; A>
B Είναι το A µεγαλύτερο του B ; A>=
B Είναι το A µεγαλύτερο ή ίσο του B ; A!=
B Είναι το A όχι ίσο (άνισο) του B ; • Οι λογικοί τελεστές µε τα ορίσµατα Α και Β αποτελούν τις λογικές εκφράσεις. Θα δούµε τις λογικές εκφράσεις σε πρώτη φάση στις εντολές if και switch.Εντολή - if
• Εντολή αλλαγής της ροής του προγράµµατος σύµφωνα µε τη λογική τιµή µιας έκφρασης. if <συνθήκη> <εντολή1 | δέσµη εντολών1> else < εντολή2 | δέσµη εντολών2>Φωλιασµένες if (nested)
• Εντολές if που αποτελούν µέρος άλλης if ή else λέγονται φωλιασµένες ή εστιασµένες if. Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
35
Εντολές Ελέγχου
H κλιµακωτή εντολή if – else if
• Για πολλαπλούς ελέγχους χρησιµοποιούµε τη κλιµακωτή if – else if εντολή. if <συνθήκη> <εντολή> ; else if <συνθήκη> <εντολή> else if <συνθήκη> <εντολή>:
else <εντολή> • Παράδειγµα χρήσης της if – else if class IfElse {public static void main(String args[]) { int month = 4; // April
String season;
if(month == 12 || month == 1 || month == 2) season = "Winter";
else if(month == 3 || month == 4 || month == 5) season = "Spring";
else if(month == 6 || month == 7 || month == 8) season = "Summer";
else if(month == 9 || month == 10 || month == 11) season = "Autumn";
else
season = "Error in Month";
System.out.println("April is in the " + season + ".");
} }
Προγραµµατισµός µε Java
36
Εντολές Ελέγχου
Εντολή – switch
• Εντολή πολλαπλών αποφάσεων – διαδροµών. switch <έκφραση> { case <τιµή 1> ; // σειρά εντολών break ; case <τιµή 2> ; // σειρά εντολών break ; : : default ; // σειρά εντολών }• Η έκφραση πρέπει να είναι του τύπου byte, short, int, ή char. Η default είναι προαιρετική.
• Παράδειγµα χρήσης της if – else if
class SampleSwitch {
public static void main(String args[]) { for(int i=0; i<6; i++)
switch(i) { case 0: System.out.println("i is zero."); break; case 1: System.out.println("i is one."); break; case 2: System.out.println("i is two."); break; Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
37
Εντολές Ελέγχου case 3: System.out.println("i is three."); break; default:
System.out.println("i is greater than 3."); } } }
Φωλιασµένες switch
• Εντολή switch µέσα σε άλλη δηµιουργεί φωλιασµένες switch – εντολές. switch (counter1) { case 1: switch (counter2) { case 0: System.out.println(“Value is zero”); break; case 1: System.out.println(“Value is one”); break; } break; case 2::
Εντολές επανάληψης
• Οι εντολές επανάληψης της java είναι οι :
for, while
καιdo – while
. Αυτές οι εντολές δηµιουργούν θηλιές (loops). Οι εντολές που περικλείονται µέσα στις θηλιές εκτελούνται συνήθως µέχρις ότου εκτελεσθεί µία συνθήκη τερµατισµού.Προγραµµατισµός µε Java
38
Εντολές Ελέγχου
Eντολή – for
• Είναι η εντολή που εκτελείται για προκαθορισµένο αριθµό επαναλήψεων. for (<αρχική τιµή> ; <συνθήκη τερµατισµού>; <βήµα επανάληψης>) • Επανάληψη της θηλιάς για 10 – φορές.for (i=1; i<11; i++) System.out.println(i);
• Επανάληψη της θηλιάς για 10 – φορές. Προσέξτε τις τιµές του i.
class Forloop1 {
public static void main(String args[]) { int i;
for(i=10; i>0; i--)
System.out.println("Number : " + i); } } • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα παρακάτω αποτελέσµατα: Number : 10 Number : 9 Number : 8 Number : 7 Number : 6 Number : 5 Number : 4 Number : 3 Number : 2 Number : 1 Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
39
Εντολές Ελέγχου
• Μπορούµε να ορίσουµε την µεταβλητή της θηλιάς µέσα στην ίδια την θηλιά, όταν δεν θέλουµε να την χρησιµοποιήσουµε έξω από τη θηλιά.
class ForLoop2 {
public static void main(String args[]) { // εδώ η i ορίζεται µέσα στη θηλιά for(int i=10; i>0; i--)
System.out.println("Number : " + i); } } • Στο παρακάτω παράδειγµα η συνθήκη τερµατισµού είναι boolean και όχι συνθήκη τιµής. Boolean ok = false;
for (int I = 1; ! ok; I++) {
//
…
if (metr >10) ok = true;:
• Στο παρακάτω παράδειγµα θα χρησιµοποιήσουµε θηλιά όπου όµως η τιµή εκκίνησης και το βήµα της επανάληψης ορίζονται έξω από αυτήν. class ForVar {public static void main(String args[]) { int i;
boolean done = false; i = 0;
for( ; !done; ) {
System.out.println("i is " + i); if(i == 10) done = true;
i++;
} } }
Προγραµµατισµός µε Java
40
Εντολές Ελέγχου • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα παρακάτω αποτελέσµατα: i is 0 i is 1 i is 2 i is 3 i is 4 i is 5 i is 6 i is 7 i is 8 i is 9 i is 10 • Ατέρµονη θηλιά θα έχουµε όταν δεν ορίσουµε τα τρία µέρη της. Για παράδειγµα: for ( ; ; ) { //.. }
Φωλιασµένες for
• Μία θηλιά - for που εκτελείται µέσα σε άλλη. • Ένα παράδειγµα φωλιασµένων - for θα δούµε στο παρακάτω παράδειγµα. class ForNested {public static void main(String args[]) { int i, j;
for(i=0; i<10; i++) { for(j=i; j<10; j++) System.out.print("*"); System.out.println(); } } } Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java
41
Εντολές Ελέγχου • Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα παρακάτω αποτελέσµατα: ********** ********* ******** ******* ****** ***** **** *** ** *
Εντολή - while
• Επαναλαµβάνει µία ή περισσότερες εντολές όσο ισχύει µία συνθήκη που ελέγχεται σε κάθε επανάληψη. while <συνθήκη> { // σώµα της θηλιάς } • Η τιµή της συνθήκης τερµατίζει τη θηλιά. Όταν η συνθήκη πάρει ψευδή τιµή λόγω του ότι είναι boolean, τότε η θηλιά θα τερµατιστεί και θα εκτελεστεί η αµέσως µετά την while – εντολή. • Στο παρακάτω παράδειγµα θα δούµε µία θηλιά να εκτελείται 10 – φορές µε φθίνουσα µέτρηση δηλαδή, από το 10 προς το 1. class DemoWhile {public static void main(String args[]) { int i = 10; while(i > 0) { System.out.println("Number : " + i); i--; } } } Παναγιώτης Σφέτσος
,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003Προγραµµατισµός µε Java