Shmeiwseis Java
February 7, 2017 | Author: Giannis Samaras | Category: N/A
Short Description
Download Shmeiwseis Java...
Description
Προγραµµατισµός µε Java
Παναγιώτης Σφέτσος,
0
Εισαγωγή
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε 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). Μετά πηγαίνουµε σε ένα κατάλογο όπου θα αποθηκεύουµε και θα εκτελούµε
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
4
Το πρώτο µας πρόγραµµα
τα προγράµµατά µας. Αν δεν υπάρχει τέτοιος κατάλογος τον δηµιουργούµε.
¾ Μετά καλούµε ένα απλό κειµενογράφο, για παράδειγµα τον Notepad, όπου θα γράψουµε το πρόγραµµα. (Programs | Accessories | Notepad).
¾ Γράφουµε το πρόγραµµα.
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε 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 / και ΝΤ. Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε 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 ; //
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε 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,
•
String args[ ] ή String[ ] args,
δηλώνει στον µεταγλωττιστή ότι η main() δεν επιστρέφει κάποια τιµή. ορίζει ένα πίνακα (array) παραµέτρων µε
όνοµα args µε τιµές της κλάσης String. Η args θα πάρει τιµές κατά την εκτέλεση του προγράµµατος (όχι βέβαια στο παράδειγµά µας). •
main(),
είναι η µέθοδος που καλείται όταν µία εφαρµογή java ξεκινά. Το
σώµα της περιέχεται µέσα σε άγκιστρα { }.
Η main() είναι το σηµείο
εκκίνησης του διερµηνέα. Μία εφαρµογή µπορεί να έχει δεκάδες κλάσεις αλλά µία από αυτές πρέπει να περιέχει την main(). •
Η τελευταία εντολή εµφανίζει στην οθόνη το µήνυµα χρησιµοποιώντας την µέθοδο println() και τις System.out που ορίζουν, η µεν πρώτη µία κλάση που παρέχει πρόσβαση στα µέσα του Συστήµατος, ενώ η δεύτερη την δέσµη εξόδου στην οθόνη. System.out.println("Hello Java");
•
Η εντολή τελειώνει µε το semicolon (;). Όλες οι εντολές της java τελειώνουν µε το σύµβολο αυτό.
•
Το πρώτο άγκιστρο κλείνει την main(), ενώ το δεύτερο την κλάση Hello.
•
Όταν το πρόγραµµα είναι µικρό περιέχει συνήθως µία κλάση. Στην περίπτωση αυτή θα πρέπει το όνοµα του πηγαίου κώδικα να είναι απόλυτα ίδιο µε το όνοµα της κλάσης.
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
9
Προγραµµατισµός µε Java •
Το πρώτο µας πρόγραµµα
Προσέξτε για µία ακόµη φορά τον τρόπο σύνταξης των στοιχείων του προγράµµατος καθώς η 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]); } }
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
10
Το πρώτο µας πρόγραµµα
Αν εκτελέσουµε το πρόγραµµα θα πάρουµε το αποτέλεσµα: C:\>javac Hello.java C:\>java Hello Java Hello Java
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
11
Προγραµµατισµός µε Java
∆εδοµένα – Τελεστές - Μεταβλητές
Αρχικοί τύποι δεδοµένων Ακέραιοι και ∆εκαδικοί Αρχικοί τύποι Ακεραίων (Integer)
Τύπος Μέγεθος Όρια τιµών Byte
8 bits
-128 to +127
Short
16 bits
-32,768 to +32,767
Int
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 σε κανονική µορφή.
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε 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; . . . . . . } }
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
14
∆εδοµένα – Τελεστές - Μεταβλητές
Μεταβλητές (variables) •
Μεταβλητή, είναι ένας χώρος της µνήµης που θα πάρει τιµή µέσα στο πρόγραµµα ή κατά την εκτέλεση του προγράµµατος. Η µεταβλητή µπορεί να αλλάξει τιµή µέσα στο πρόγραµµα.
•
Πριν χρησιµοποιήσουµε µία µεταβλητή θα πρέπει να ορίσουµε το όνοµα και τον τύπο των δεδοµένων που θα λάβει.
Ονόµατα Μεταβλητών •
Το όνοµα της µεταβλητής αρχίζει µε ένα γράµµα, την underscore (_) ή το $ και µπορεί να περιέχει συνδυασµούς γραµµάτων και αριθµών.
•
Ένα πρόγραµµα αναφέρεται στην τιµή µιας µεταβλητής, χρησιµοποιώντας το όνοµα της. Το όνοµα της µεταβλητής πρέπει να αποτελείται από σειρές καταλλήλων Unicode χαρακτήρων, δηλαδή το σύστηµα κωδικοποίησης χαρακτήρων που υποστηρίζει κείµενο σε διαφορετικές γλώσσες όπως Ελληνική, Ιαπωνική, Εβραϊκή κ.ά.
•
Το όνοµα της µεταβλητής : 9 ∆εν πρέπει να είναι δεσµευµένη λέξη. 9 Πρέπει να είναι µοναδικό µέσα στο µπλόκ προγράµµατος που ορίζεται – scope.
Ασκήσεις µε χρήση Μεταβλητών Στο παρακάτω παράδειγµα: • • • •
ορίζουµε δύο µεταβλητές τις ar1 και ar2 στη συνέχεια δίνουµε τιµές στις µεταβλητές εκτελούµε απλές πράξεις εµφανίζουµε τα αποτελέσµατα
class Example1 { public static void main(String args[]) { int ar1;
//Ορίζει τη µεταβλητή ar1 που θα πάρει ακέραια τιµή
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java int ar2;
15
∆εδοµένα – Τελεστές - Μεταβλητές
//Ορίζει τη µεταβλητή 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);
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε 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 = y = ++x y++ x = y = •
Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: 8 13 = 9 = 13 9 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 y x x x x x
= = + * / %
17 5 y = y = y = y = y =
22 12 85 3 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 y x x x x x
• = = + * / %
Αν εκτελέσουµε το πρόγραµµα θα πάρουµε τα αποτελέσµατα: 23.5 7.3 y = 30.8 y = 16.2 y = 171.55 y = 3.219178 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 = 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 = y = false y == z = true x != z = true
String – τελεστές (συνένωση - concatenation) •
Στην παρακάτω άσκηση θα δούµε την συνένωση διαφόρων string :
class Concatenation { public static void main (String args[]) {
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε 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 a b a|b a&b a^b ~a&b|a&~b ~a
= = = = = = =
25
∆εδοµένα – Τελεστές - Μεταβλητές
0011 0110 0111 0010 0101 0101 1100
Στο παρακάτω παράδειγµα θα δούµε την χρήση του τελεστή:
>=
==
!=
<
!
=
B
Είναι το A µεγαλύτερο ή ίσο του B ;
A
!=
B
Είναι το A όχι ίσο (άνισο) του B ;
•
B
Είναι το A ίσο µε το B ; Είναι το A µικρότερο του B ;
B
B
Είναι το A µικρότερο ή ίσο του B ; Είναι το A µεγαλύτερο του B ;
B
Οι λογικοί τελεστές µε τα ορίσµατα Α και Β αποτελούν τις λογικές εκφράσεις. Θα δούµε τις λογικές εκφράσεις σε πρώτη φάση στις εντολές if και switch.
Εντολή - if •
Εντολή αλλαγής της ροής του προγράµµατος σύµφωνα µε τη λογική τιµή µιας έκφρασης. if
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 + "."); } }
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
36
Εντολές Ελέγχου
Εντολή – switch •
Εντολή πολλαπλών αποφάσεων – διαδροµών. switch
{
case ; // σειρά εντολών
break ; case ; // σειρά εντολών
break ; : : default ;
// σειρά εντολών
} •
Η έκφραση πρέπει να είναι του τύπου byte, short, int, ή char. Η default είναι προαιρετική.
•
Παράδειγµα χρήσης της if – else if
class SampleSwitch { public static void main(String args[]) { for(int i=0; i0; 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++; }
}
}
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε 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 0); } }
•
Στο ανωτέρω παράδειγµα η εντολή do – while θα µπορούσε να γραφεί και µε τον παρακάτω τρόπο :
do System.out.println("Number : " + i); while (--i > 0);
Ο διαχωριστής comma στη for – θηλιά •
Μία παραλλαγή της for είναι η µορφή όπου δίνουµε αρχικές τιµές στις µεταβλητές της θηλιάς. Έτσι αν είχαµε τον παρακάτω κώδικα θα µπορούσαµε να γράψουµε τις τιµές b = 4 και b -- µέσα στον ορισµό της for. class Sample { public static void main(String args[]) { int a, b; b = 4; for(a=1; a " + s1.equals(s2)); System.out.println(s1 + " equals " + s3 + " -> " + s1.equals(s3)); System.out.println(s1 + " equals " + s4 + " -> " + s1.equals(s4)); System.out.println(s1 + " equalsIgnoreCase " + s4 + " -> " + s1.equalsIgnoreCase(s4)); } } •
Ταξινόµηση φυσαλίδας –bubble για strings.
class SortString { static String arr[] = { "Now", "is", "the", "time", "for", "all", "good", "men",
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
159
Προγραµµατισµός µε Java
Χειρισµός των Strings
"to", "come", "to", "the", "aid", "of", "their", "country"}; public static void main(String args[]) { for(int j = 0; j < arr.length; j++) { for(int i = j + 1; i < arr.length; i++) { if(arr[i].compareTo(arr[j]) < 0) { String t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } System.out.println(arr[j]); } } } •
Χρήση της indexOf() και lastIndexOf().
class indexOfDemo { public static void main(String args[]) { String s = "Now is the time for all good men " + "to come to the aid of their country."; System.out.println(s); System.out.println("indexOf(t) = " + s.indexOf('t')); System.out.println("lastIndexOf(t) = " + s.lastIndexOf('t')); System.out.println("indexOf(the) = " + s.indexOf("the")); System.out.println("lastIndexOf(the) = " + s.lastIndexOf("the")); System.out.println("indexOf(t, 10) = " + s.indexOf('t', 10)); System.out.println("lastIndexOf(t, 60) = " + s.lastIndexOf('t', 60)); System.out.println("indexOf(the, 10) = " + s.indexOf("the", 10));
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
160
Προγραµµατισµός µε Java
Χειρισµός των Strings
System.out.println("lastIndexOf(the, 60) = " + s.lastIndexOf("the", 60)); } }
•
Αντικατάσταση Substring.
class StringReplace { public static void main(String args[]) { String org = "This is a test. This is, too."; String search = "is"; String sub = "was"; String result = ""; int i; do { // αντικατάσταση όλων των substrings που ταιριάζουν System.out.println(org); i = org.indexOf(search); if(i != -1) { result = org.substring(0, i); result = result + sub; result = result + org.substring(i + search.length()); org = result; } } while(i != -1); } }
•
Χρήση της trim() για σωστή εκτέλεση των εντολών.
import java.io.*; class UseTrim { public static void main(String args[]) throws IOException {
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
161
Χειρισµός των Strings
//δηµιουργία ενός BufferedReader χρησιµοποιώντας την System.in
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; System.out.println("Enter 'stop' to quit."); System.out.println("Enter State: "); do { str = br.readLine(); str = str.trim(); // remove whitespace if(str.equals("Illinois")) System.out.println("Capital is Springfield."); else if(str.equals("Missouri")) System.out.println("Capital is Jefferson City."); else if(str.equals("California")) System.out.println("Capital is Sacramento."); else if(str.equals("Washington")) System.out.println("Capital is Olympia."); // ... } while(!str.equals("stop")); } }
•
Χρήση των toUpperCase() και toLowerCase().
class ChangeCase { public static void main(String args[]) { String s = "This is a test."; System.out.println("Original: " + s); String upper = s.toUpperCase(); String lower = s.toLowerCase(); System.out.println("Uppercase: " + upper); System.out.println("Lowercase: " + lower); } }
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java •
162
Χειρισµός των Strings
Το length και η capacity του StringBuffer.
class StringBufferDemo { public static void main(String args[]) { StringBuffer sb = new StringBuffer("Hello"); System.out.println("buffer = " + sb); System.out.println("length = " + sb.length()); System.out.println("capacity = " + sb.capacity()); } }
•
Χρήση των charAt() και setCharAt().
class setCharAtDemo { public static void main(String args[]) { StringBuffer sb = new StringBuffer("Hello"); System.out.println("buffer before = " + sb); System.out.println("charAt(1) before = " + sb.charAt(1)); sb.setCharAt(1, 'i'); sb.setLength(2); System.out.println("buffer after = " + sb); System.out.println("charAt(1) after = " + sb.charAt(1)); } }
•
Χρήση της append().
class appendDemo { public static void main(String args[]) { String s; int a = 42; StringBuffer sb = new StringBuffer(40); s = sb.append("a = ").append(a).append("!").toString(); System.out.println(s); } }
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java •
163
Χειρισµός των Strings
Χρήση της insert().
class insertDemo { public static void main(String args[]) { StringBuffer sb = new StringBuffer("I Java!"); sb.insert(2, "like "); System.out.println(sb); } }
•
Χρήση της reverse()για αντιστροφή string σε StringBuffer.
class ReverseDemo { public static void main(String args[]) { StringBuffer s = new StringBuffer("abcdef"); System.out.println(s); s.reverse(); System.out.println(s); } }
•
Χρήση της delete() και deleteCharAt().
class deleteDemo { public static void main(String args[]) { StringBuffer sb = new StringBuffer("This is a test."); sb.delete(4, 7); System.out.println("After delete: " + sb); sb.deleteCharAt(0); System.out.println("After deleteCharAt: " + sb); } }
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
164
Προγραµµατισµός µε Java •
Χειρισµός των Strings
Χρήση της replace().
class replaceDemo { public static void main(String args[]) { StringBuffer sb = new StringBuffer("This is a test."); sb.replace(5, 7, "was"); System.out.println("After replace: " + sb); } }
Πέρασµα παραµέτρων κατά την εκτέλεση του προγράµµατος Κατά την εκτέλεση του προγράµµατος µπορούµε να περάσουµε παραµέτρους στην main() που αποθηκεύονται στον πίνακα της String. Οι παράµετροι συντάσσονται, µε σειρά, µετά το όνοµα του προγράµµατος όταν εκτελείται στην γραµµή εντολών. Ήδη έχουµε χρησιµοποιήσει το πέρασµα παραµέτρων κατά την εκτέλεση του προγράµµατος και στην επεξεργασία των αρχείων αλλά και σε άλλες ασκήσεις. •
Στο παρακάτω παράδειγµα θα εµφανίσουµε τις παραµέτρους που περνάµε κατά την εκτέλεση του προγράµµατος στην γραµµή εντολών.
class CommandLine { public static void main(String args[]) { for(int i=0; iappletviewer RunApp.html Για να αυξήσουµε ακόµη περισσότερο την ταχύτητα εκτέλεσης του applet γράφουµε τον κώδικα HTML – σαν σχόλιο µέσα στο applet και µετά το εκτελούµε µε τον appletviewer. ∆ηλαδή, το προηγούµενο applet εµφάνισης του µηνύµατος θα µπορούσε να γραφεί :
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
167
Applets
import java.awt.*; import java.applet.*; /* */ public class SimpleApplet extends Applet { public void paint(Graphics g) { g.drawString("A Simple Applet", 20, 20); } }
•
setBackground( Color.pink ), µία άλλη µέθοδος της Graphics για εφαρµογή χρώµατος στο background.
Μέθοδοι Ζωγραφικής Σχεδιασµός κύκλου Η µέθοδος drawOval() σχεδιάζει κύκλο. Η γενική µορφή της είναι : •
drawOval( int X, int Y, int width, int height )
Στο παρακάτω παράδειγµα θα δούµε την χρήση της drawOval(). import java.applet.Applet; import java.awt.*; // assume that the drawing area is 150 by 150 public class JustOneCircle extends Applet {
final int radius = 25; public void paint ( Graphics gr ) { setBackground( Color.lightGray ); gr.drawOval( (150/2 - radius), (150/2 - radius), radius*2,
radius*2 ); } }
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
168
Προγραµµατισµός µε Java
Applets
Σχεδιασµός τετραγώνου Η µέθοδος drawRect() σχεδιάζει τετράγωνο. Η γενική µορφή της είναι : drawRect(int
x, int
y, int
width, int
height)
Στο παρακάτω παράδειγµα θα δούµε την χρήση της drawRect(). import java.applet.Applet; import java.awt.*; // υποθέτουµε ότι η επιφάνεια σχεδιασµού είναι 150 επι 150 public class SquareAndRectangle extends Applet {
final int areaSide = 150 ; final int width = 100, height = 50; public void paint ( Graphics gr ) { setBackground( Color.green ); setColor( Color.blue ); // εξωτερικό περίγραµµα της επιφάνειας gr.drawRect( 0, 0, areaSide-1, areaSide-1 ); // σχεδιασµός του εσωτερικού τετραγώνου. gr.drawRect( areaSide/2 - width/2 , areaSide/2 - height/2, width, height ); }
}
•
Σχεδιασµός γραµµής. H γενική µορφή της µεθόδου είναι : drawLine(int
Παναγιώτης Σφέτσος,
x1, int
y1, int
Ιωάννης Σταµέλος,
x2, int
y2)
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
169
Applets
Ένα ολοκληρωµένο πρόγραµµα γραφικών που σχεδιάζει πλαίσιο επάνω στο
•
οποίο στη συνέχεια ζωγραφίζουµε κάποιο σχήµα. import java.awt.*; import java.applet.Applet; public class ShapesDemo extends Applet { final static int maxCharHeight = 15; public void init() { validate(); } public void paint(Graphics g) { Dimension d = size(); int x = 5; int y = 7; Color bg = getBackground(); Color fg = getForeground(); int gridWidth = d.width / 7; int gridHeight = d.height / 2; int stringY = gridHeight - 7; int rectWidth = gridWidth - 2*x; int rectHeight = stringY - maxCharHeight - y; g.setColor(bg); g.draw3DRect(0, 0, d.width - 1, d.height - 1, true); g.draw3DRect(3, 3, d.width - 7, d.height - 7, false); g.setColor(fg); // drawLine() g.drawLine(x, y+rectHeight-1, x + rectWidth, y); // x1, y1, x2, y2 g.drawString("drawLine()", x, stringY); x += gridWidth;
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
170
Applets
// drawRect() g.drawRect(x, y, rectWidth, rectHeight); // x, y, width, height g.drawString("drawRect()", x, stringY); x += gridWidth; // draw3DRect() g.setColor(bg); g.draw3DRect(x, y, rectWidth, rectHeight, true); g.setColor(fg); g.drawString("draw3DRect()", x, stringY); x += gridWidth; // drawRoundRect() g.drawRoundRect(x, y, rectWidth, rectHeight, 10, 10); // x, y, w, h, arcw, arch g.drawString("drawRoundRect()", x, stringY); x += gridWidth; // drawOval() g.drawOval(x, y, rectWidth, rectHeight); // x, y, w, h g.drawString("drawOval()", x, stringY); x += gridWidth; // drawArc() g.drawArc(x, y, rectWidth, rectHeight, 90, 135); // x, y, w, h g.drawString("drawArc()", x, stringY); x += gridWidth; // drawPolygon() Polygon polygon = new Polygon(); polygon.addPoint(x, y); polygon.addPoint(x+rectWidth, y+rectHeight); polygon.addPoint(x, y+rectHeight); polygon.addPoint(x+rectWidth, y);
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
171
Applets
//polygon.addPoint(x, y); //don't complete; fill will, draw won't g.drawPolygon(polygon); g.drawString("drawPolygon()", x, stringY); x = 5 + gridWidth; y += gridHeight; stringY += gridHeight; // fillRect() g.fillRect(x, y, rectWidth, rectHeight); // x, y, width, height g.drawString("fillRect()", x, stringY); x += gridWidth; // fill3DRect() g.setColor(bg); g.fill3DRect(x, y, rectWidth, rectHeight, true); g.setColor(fg); g.drawString("fill3DRect()", x, stringY); x += gridWidth; // fillRoundRect() g.fillRoundRect(x, y, rectWidth, rectHeight, 10, 10); // x, y, w, h, arcw, arch g.drawString("fillRoundRect()", x, stringY); x += gridWidth; // fillOval() g.fillOval(x, y, rectWidth, rectHeight); // x, y, w, h g.drawString("fillOval()", x, stringY); x += gridWidth; // fillArc() g.fillArc(x, y, rectWidth, rectHeight, 90, 135); // x, y, w, h g.drawString("fillArc()", x, stringY);
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
172
Applets
x += gridWidth; // fillPolygon() Polygon filledPolygon = new Polygon(); filledPolygon.addPoint(x, y); filledPolygon.addPoint(x+rectWidth, y+rectHeight); filledPolygon.addPoint(x, y+rectHeight); filledPolygon.addPoint(x+rectWidth, y); //filledPolygon.addPoint(x, y); g.fillPolygon(filledPolygon); g.drawString("fillPolygon()", x, stringY); } }
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
173
Graphics – Windows - GUI
Abstract Window Toolkit (AWT) Την βιβλιοθήκη αυτή χρησιµοποιήσαµε στα Applets. Θα την χρησιµοποιήσουµε όµως και τώρα, επειδή περιέχει κλάσεις και µεθόδους
που
χρησιµοποιούνται στα
παράθυρα – windows.
Ιεραρχία των παραθύρων Η AWT ορίζει τα παράθυρα κατά ιεραρχικό τρόπο.
• H κλάση – Component (Συστατικό) Είναι η πρώτη στην ιεραρχία abstract – κλάση. Ορίζει εκατοντάδες µεθόδους που χειρίζονται τα συµβάντα (events) όπως για παράδειγµα το πάτηµα των πλήκτρων του ποντικιού, η τον χειρισµό των παραθύρων. Τέτοιοι χειρισµοί παραθύρων είναι η ελαχιστοποίηση και επαναφορά των, η αυξοµείωση του µεγέθους των και επαναφορά των χρωµάτων των. Τα αντικείµενα της κλάσης λέγονται Συστατικά (components). •
Container Είναι υποκλάση - subclass της component και περιέχει µεθόδους που επιτρέπουν το φώλιασµα άλλων Συστατικών. Οι µέθοδοι αυτοί χειρίζονται την τοποθέτηση των Συστατικών και συντελούν στην ανάπτυξη εφαρµογών µε όµορφο οπτικά περιβάλλον.
•
Panel Μαζί µε την Window είναι οι δύο υποκλάσεις της Container. Η panel είναι η superclass των applets. Τα applets τρέχουν επάνω στα panels. Προσθέτουµε άλλα Συστατικά επάνω στο panel µε την µέθοδο add() που κληρονοµεί από την container. Μετά την τοποθέτηση των Συστατικών µπορούµε να τα χειριστούµε µε τις µεθόδους setLocation(), setSize() και setBounds().
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java •
174
Graphics – Windows - GUI
Window Η µέθοδος αυτή δηµιουργεί ένα παράθυρο αρχικού επιπέδου (top level). Αρχικού επιπέδου παράθυρο σηµαίνει ότι δεν περιέχεται µέσα σε άλλα αντικείµενα αλλά ‘τρέχει’ επάνω στο γραφικό περιβάλλον του λειτουργικού.
•
Frame Είναι υποκλάση της Window και περιέχει την µπάρα τίτλου, την µπάρα του µενού επιλογών, τα πλαίσια και τις γωνίες χειρισµού του µεγέθους του παραθύρου. Αν δηµιουργήσουµε ένα αντικείµενο – frame µέσα από ένα applet, τότε θα δούµε το προειδοποιητικό µήνυµα : “Warning: Applet Window” που µας προειδοποιεί ότι ένα frame δηµιουργήθηκε.
•
Canvas Παρόλο που δεν είναι ιεραρχικό µέλος των applets ή των παραθύρων είναι ένα άλλο σηµαντικό είδος λευκού - παραθύρου που το χρησιµοποιούµε για να σχεδιάζουµε γραφικά σχήµατα.
H εργασία µε τα Frame Windows Τις περισσότερες φορές τα παράθυρα που θα χρησιµοποιούµε θα είναι του τύπου frame. Συνήθως δηµιουργούµε τέτοια παράθυρα µέσα στα applets ή αρχικά παράθυρα µεγάλων εφαρµογών. Υποστηρίζει
τους δοµητές: Frame() και Frame(τίτλος -
string). Ο πρώτος δηµιουργεί ένα παράθυρο χωρίς τίτλο ενώ ο δεύτερος µε τίτλο που ορίζεται από το string. Οι διαστάσεις του παραθύρου ορίζονται µετά την δηµιουργία του. •
Ορισµός των διαστάσεων του παραθύρου Η µέθοδος - setSize() καθορίζει το µέγεθος του παραθύρου. Η γενική της µορφή είναι: void setSize(int new width, int new height) void setSize(Dimension newSize)
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
Προγραµµατισµός µε Java
175
Graphics – Windows - GUI
Όπου: new width και new height, καθορίζουν το νέο µέγεθος του παραθύρου. Dimension, είναι το αντικείµενο µε τα πεδία width και height που δίνουν τιµή στο newSize. Οι διαστάσεις ορίζονται σε pixels. Η µέθοδος getSize() επιστρέφει τις τρέχουσες διαστάσεις του παραθύρου. Η γενική της µορφή: Dimension getSize() •
Εµφάνιση και απόκρυψη παραθύρου Ένα παράθυρο όταν δηµιουργείται δεν εµφανίζεται απ’ ευθείας αλλά µε την χρήση της setVisible(). Η γενική της µορφή είναι : void setVisible(boolean visibleFlag) Αν η visibleFlag είναι true, τότε το παράθυρο φαίνεται, διαφορετικά είναι κρυµένο.
•
Ορισµός του τίτλου παραθύρου Ορίζουµε ή αλλάζουµε τον τίτλο του παραθύρου µε την setTitle(). Η γενική της µορφή είναι : void setTitle(String newTitle) Η newTitle, είναι ο τίτλος του παραθύρου.
•
Κλείσιµο παραθύρου Όταν τελειώνουµε τις εργασίες µε ένα παράθυρο το διαγράφουµε από την οθόνη µε την setVisible(false). Για να κλείσουµε ένα παράθυρο χρησιµοποιούµε επίσης την µέθοδο windowClosing().
•
Στο παρακάτω παράδειγµα θα δηµιουργήσουµε ένα frame – παράθυρο µε τον πλέον εύκολο τρόπο.
Παναγιώτης Σφέτσος,
Ιωάννης Σταµέλος,
Θεσσαλονίκη Φεβρουάριος 2003
176
Προγραµµατισµός µε Java
Graphics – Windows - GUI
import java.awt.*; public class GUI1 { public static void main(String[] args) { Frame frm = new Frame(); frm.setSize( 150, 100 ); frm.setVisible( true ); } }
•
Αν εκτελέσουµε το πρόγραµµα θα πάρουµε το παρακάτω παράθυρο το οποίο όµως δεν µπορούµε να κλείσουµε µε το x στο δεξί άνω άκρο του παραθύρου διότι
δεν
έχει
ενεργοποιηθεί
η
µέθοδος
windowClosing()
της
WindowListener. Κλείνουµε το παράθυρο στο περιβάλλον DOS µε τα πλήκτρα Ctrl και c.
•
Οι διαστάσεις του παραθύρου µπορεί να αλλάξουν και κατά την εκτέλεση του προγράµµατος.
import java.awt.*; public class GUI2 { public static void main(String[] args) { Frame frm = new Frame(); int width = 20; int height = 10; frm.setVisible( true ); for ( int count=1; count
View more...
Comments