Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Είσοδος – Έξοδος – Μορφοποιήσεις - Εξαιρέσεις στη Java Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών 1 Βελώνης Γεώργιος – Καθηγητής Πληροφορικής ΠΕ 20.

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "Είσοδος – Έξοδος – Μορφοποιήσεις - Εξαιρέσεις στη Java Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών 1 Βελώνης Γεώργιος – Καθηγητής Πληροφορικής ΠΕ 20."— Μεταγράφημα παρουσίασης:

1 Είσοδος – Έξοδος – Μορφοποιήσεις - Εξαιρέσεις στη Java Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών 1 Βελώνης Γεώργιος – Καθηγητής Πληροφορικής ΠΕ 20 Σχολ. Έτος 2015-16

2 Περιεχόμενα 2 Εισαγωγή Byte και Character streams Προκαθορισμένα Ρεύματα ( Standard Streams) Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση ορισμάτων Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”Scanner” Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader ” Βασική είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της μεθόδου ”read()” Βασική έξοδος χαρακτήρων στην οθόνη με τη χρήση της μεθόδου ”write()”

3 Περιεχόμενα 3 Βασική έξοδος συμβολοσειρών στην οθόνη με τη χρήση των μεθόδων ”print()” & ”println()” Έξοδος δεδομένων στην οθόνη με τη χρήση της κλάσης ”PrintWriter” Μορφοποίηση εξόδου με τις μεθόδους ”printf()” και ”format()” Μορφοποίηση δεδομένων - Κλάση ” DecimalFormat ” Έξοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) Εξαιρέσεις ( Exceptions)

4 Εισαγωγή 4 Οι εργασίες εισόδου / εξόδου στη Java γίνονται μέσα από ρεύματα ή δέσμες συνεχούς ροής, γνωστά και ως streams, που συνδέονται με τις φυσικές μονάδες εισόδου / εξόδου του υπολογιστή. Ένα stream είναι ένα αντικείμενο το οποίο επιτρέπει τη ροή δεδομένων μεταξύ ενός προγράμματος και κάποιας συσκευής εισόδου / εξόδου ή αρχείου. Η java χειρίζεται τα streams μέσα από κλάσεις και μεθόδους του πακέτου java.io. Σε αυτό το πακέτο περιέχονται σχεδόν όλες οι κλάσεις που θα χρειαστεί ο χρήστης για να εκτελέσει είσοδο ( ρεύμα εισόδου - input stream ) και έξοδο ( ρεύμα εξόδου - output stream ) δεδομένων σε ένα πρόγραμμα Java. Όλα αυτά τα streams αποτελούν μια πηγή εισόδου και ένα προορισμό εξόδου. Το stream στο πακέτο java.io υποστηρίζει πολλούς τύπους δεδομένων, όπως τους βασικούς, τα αντικείμενα, τους χαρακτήρες, κλπ.

5 Byte και Character streams 5 H Java ορίζει δύο τύπους δέσμης συνεχούς ροής : τον byte και τον character stream. Οι δέσμες byte streams χειρίζονται τις εισόδους και εξόδους των bytes. Τέτοιες εισόδους και εξόδους έχουμε για παράδειγμα όταν διαβάζουμε ή γράφουμε δυαδικά δεδομένα από και προς τα αρχεία. Οι δέσμες character streams χειρίζονται εισόδους και εξόδους χαρακτήρων. Χρησιμοποιούν την δέσμη χαρακτήρων Unicode και για τον λόγο αυτό εφαρμόζονται σε διεθνείς εφαρμογές. Οι δέσμες αυτές είναι και πιο αποτελεσματικές απ ’ ότι οι δέσμες byte. Οι δέσμες character προστέθηκαν στη Java με την έκδοση 1.1. Πάντως, οι χαμηλού επιπέδου επεξεργασίες Ι / Ο εξακολουθούν να γίνονται με δέσμες byte.

6 Byte και Character streams 6 byte streams: Η Java ορίζει για την byte stream δύο ιεραρχικές κλάσεις, τις InputStream και OutputStream. Κάτω από αυτές τις κλάσεις υπάρχουν πολλές υποκλάσεις που χειρίζονται τις διαφορετικές συσκευές εισόδου και εξόδου. Μέσα στις δύο αυτές κύριες κλάσεις μπορούμε να ορίσουμε πολλές μεθόδους για την επεξεργασία των bytes αλλά οι δύο κυριότερες από αυτές είναι οι read() και write() για το διάβασμα και γράψιμο των bytes. character streams: Η Java ορίζει για την character stream δύο ιεραρχικές κλάσεις, τις Reader και Writer. Οι δύο αυτές κλάσεις χειρίζονται την δέσμη Unicode που επιτρέπει την διεθνοποίηση των μηνυμάτων των εφαρμογών σας. Μέσα στις δύο αυτές κύριες κλάσεις μπορείτε να ορίσετε πολλές μεθόδους για την επεξεργασία των χαρακτήρων. Οι δύο πιο κύριες από τις μεθόδους αυτές είναι η read() για το διάβασμα των χαρακτήρων και η write() για το γράψιμο των χαρακτήρων.

7 Byte και Character streams 7

8 Προκαθορισμένα Ρεύματα (Standard Streams) 8 Όλες οι γλώσσες προγραμματισμού παρέχουν υποστήριξη για το πρότυπο I/O, όπου ο χρήστης του προγράμματος μπορεί να πάρει είσοδο από το πληκτρολόγιο και στη συνέχεια, παράγει την έξοδο στην οθόνη του υπολογιστή. H Java παρέχει τα ακόλουθα προκαθορισμένα ρεύματα : Standard Input: Χρησιμοποιείται για να τροφοδοτήσει με τα δεδομένα το πρόγραμμα του χρήστη. Συνήθως το πληκτρολόγιο του υπολογιστή χρησιμοποιείται ως προκαθορισμένη συσκευή εισόδου και αντιπροσωπεύεται από το System.in. Standard Output: Χρησιμοποιείται για την εξαγωγή των δεδομένων που παράγονται από το πρόγραμμα του χρήστη. Συνήθως η οθόνη του υπολογιστή χρησιμοποιείται ως προκαθορισμένη συσκευή εξόδου και αντιπροσωπεύεται από το System.out.

9 Προκαθορισμένα Ρεύματα (Standard Streams) 9 Standard Error: Χρησιμοποιείται για να εξάγει το σφάλματα των δεδομένων που παράγονται από το πρόγραμμα του χρήστη. Συνήθως η οθόνη του υπολογιστή χρησιμοποιείται ως προκαθορισμένη συσκευή εξόδου και αντιπροσωπεύεται από το System.err.

10 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση ορισμάτων 10 Για να εισάγουμε δεδομένα από το πληκτρολόγιο κατά τη διάρκεια της εκτέλεσης του προγράμματος, προσθέτουμε ορίσματα στην εντολή του διερμηνευτή Java όνομα _ προγράμματος. Σύνταξη : java όνομα _ προγράμματος όρισμα 1 όρισμα 2 …. Η Java αποθηκεύει αυτές τις τιμές στις θέσεις του πίνακα με όνομα args ( παράμετρος του main). Το όρισμα 1 αποθηκεύεται στη θέση args[0], το όρισμα 2 στη θέση args[1], κ. λπ. Παράδειγμα : java mesos_oros 15 16 14.8

11 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση ορισμάτων 11 Παράδειγμα : public class average_course_term{ public static void main(String args[ ]) { float a,b,e,average; System.out.print("A quarter:\t"+args[0]); System.out.print("\nB quarter:\t"+args[1]); System.out.print("\nExaminations:\t"+args[2]); a=Integer.valueOf(args[0]); b=Integer.valueOf(args[1]); e=Float.valueOf(args[2]); average=((a+b)/2+e)/2; System.out.println("\nAverage:\t" + average); }

12 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”Scanner” 12 1.Εισαγωγή στο πρόγραμμα της « βιβλιοθήκης » util, με την εντολή : import java.util.Scanner; στην αρχή της κλάσης, πριν την επικεφαλίδα της. 2.Δημιουργία αντικειμένου της κλάσης Scanner: Scanner input = new Scanner(System.in); ( το αντικείμενο ονομάστηκε input, αλλά θα μπορούσε να έχει οποιοδήποτε άλλη ονομασία, π. χ. in, read, κ. λπ.) 3.Κλήση κατάλληλης μεθόδου της Scanner, π. χ.: int a = input.nextInt( ); double b = input.nextDouble( ); String c = input.nextLine( );

13 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”Scanner” 13 ΜέθοδοςΕπιστρέφει byte nextByte() short nextShort() int nextInt() long nextLong() Επιστρέφει την επόμενη λεκτική μονάδα (token) ως έναν ακέραιο αριθμό τύπου byte, short, int ή long αντίστοιχα. Αν η επόμενη λεκτική μονάδα δεν είναι έγκυρος ακέραιος, προκαλείται εξαίρεση τύπου InputMismatchException. float nextFloat() double nextDouble() Επιστρέφει την επόμενη λεκτική μονάδα ως έναν αριθμό κινητής υποδιαστολής float ή double αντίστοιχα. Αν η επόμενη λεκτική μονάδα δεν είναι έγκυρος αριθμός κινητής υποδιαστολής, προκαλείται εξαίρεση τύπου InputMismatchException.

14 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”Scanner” 14 ΜέθοδοςΕπιστρέφει String next() Βρίσκει και επιστρέφει την επόμενη λεκτική μονάδα από αυτό το σαρωτή ως ένα string. Μία λεκτική μονάδα συνήθως τελειώνει με whitespaces, όπως ένα κενό ή αλλαγή γραμμής. Εάν δεν υπάρχει λεκτική μονάδα, προκαλείται εξαίρεση τύπου NoSuchElementException ή IllegalStateException αν ο ανιχνευτής (scanner) είναι κλειστός.

15 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”Scanner” 15 ΜέθοδοςΕπιστρέφει String nextLine() Επιστρέφει το υπόλοιπο της τρέχουσας γραμμής, εκτός από οποιονδήποτε διαχωριστή γραμμής που υπάρχει στο τέλος της. Εάν δε βρεθεί γραμμή, προκαλείται εξαίρεση τύπου NoSuchElementException ή IllegalStateException αν ο ανιχνευτής (scanner) είναι κλειστός. Χρησιμοποιείται όταν το αλφαριθμητικό που εισάγεται έχει περισσότερα από ένα στοιχεία χωρισμένα μεταξύ τους με κενά (π.χ. μια φράση). close() Κλείνει τη Scanner

16 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”Scanner” 16 Παράδειγμα : import java.util.Scanner; public class human_age{ public static void main(String args[]) { Scanner read = new Scanner(System.in); System.out.print("Enter your name:\t"); String name = read.nextLine(); System.out.print("Enter current year:\t"); int cy = read.nextInt(); System.out.print("Enter your birth year:\t"); int by = read.nextInt(); int age = cy - by; System.out.println("\nHi "+name+"! Your age is:\t" + age); read.close(); // Close Scanner }

17 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 17 1.Εισαγωγή στο πρόγραμμα της « βιβλιοθήκης » io, με την εντολή : import java.io. BufferedReader ; στην αρχή της κλάσης, πριν την επικεφαλίδα της. 2. Ο ορισμός του buffer αυτού με την εντολή : BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); (Το αντικείμενο ονομάστηκε br, αλλά θα μπορούσε να έχει οποιοδήποτε άλλη ονομασία. Πρώτα γίνεται κλήση της υποκλάσης InputStreamReader που μετατρέπει τα bytes σε χαρακτήρες. Για να επιτευχθεί αυτή η μετατροπή πρέπει να διασυνδεθεί η δέσμη με την System.in). 3.Κλήση κατάλληλης μεθόδου της BufferedReader, π. χ.: int a = br.read( ); char c = (char)br.read( );

18 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 18 ΜέθοδοςΕπιστρέφει read() Η μέθοδος αυτή διαβάζει ένα χαρακτήρα και τον μετατρέπεται σε int. read(char[ ] cbuf, int off, int len) Αυτή η μέθοδος επιστρέφει τον αριθμό των χαρακτήρων που έχει διαβάσει στο ρεύμα ή -1 αν ο αναγνώστης φτάνει στο τέλος του ρεύματος. char[ ] cbuf: Πίνακας χαρακτήρων που λειτουργεί ως buffer. int off(set): Αυτή η παράμετρος θα καθορίσει από πού να αρχίσει στον πίνακα χαρακτήρων του buffer. int len(gth): Το μήκος από τους χαρακτήρες που θα πρέπει να διαβάσει από το ρεύμα χαρακτήρων.

19 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 19 ΜέθοδοςΕπιστρέφει readLine() Αυτή η μέθοδος απλά επιστρέφει μια γραμμή String, την οποία το BufferedReader είχε διαβάσει. ready() Αυτή η μέθοδος απλά επιστρέφει true αν η επόμενη read() είναι εγγυημένο ότι δεν θα εμποδίσει την είσοδο, false διαφορετικά. Σημειώστε ότι η επιστροφή false δεν εγγυάται ότι η επόμενη ανάγνωση θα μπλοκαριστεί. reset() Αυτή η μέθοδος επιστρέφει void και επαναφέρει το ρεύμα στην πιο πρόσφατη ένδειξη. Σημειώστε ότι αν δεν έγινε κλήση της μεθόδου mark(), πριν από την κλήση της μεθόδου reset(), τότε θα συμβεί IOException.

20 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 20 ΜέθοδοςΕπιστρέφει skip() Αυτή η μέθοδος επιστρέφει το πλήθος των χαρακτήρων που παραλείφθηκε. Προσοχή : Μπορείτε να χρησιμοποιήσετε : 1.τη δήλωση import java.io.*; που εισάγει όλες τις κλάσεις και μεθόδους του πακέτου io. 2.τη σύνταξη throws IOException μετά την main() που θα τη συντάσσατε πάντα όταν χειριζόσαστε είσοδο / έξοδο από το πληκτρολόγιο. Όλες οι περιπτώσεις της μεθόδου read() είναι του τύπου throws IOException. Δηλαδή : int read() throws IOException int read(char[ ] cbuf, int off, int len)

21 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 21 3.Για την ανάγνωση πολλών χαρακτήρων θα πρέπει να χρησιμοποιήσετε εντολές επανάληψης (loops) ( θα δούμε σε επόμενο κεφάλαιο ).

22 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 22 Παράδειγμα: import java.io.*; public class ReadAChar1 { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter a character:"); char c = (char) br.read(); System.out.println(" \nYou entered: " + c); }

23 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 23 Παράδειγμα: import java.io.*; public class ReadAString1a { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter a number: "); String s = br.readLine(); int a=Integer.parseInt(s); System.out.println("Your number is: " + a); }

24 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 24 Παράδειγμα: import java.io.*; public class ReadAString1b { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter a number: "); int a=Integer.parseInt(br.readLine()); System.out.println("Your number is: " + a); }

25 Είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της κλάσης ”BufferedReader” 25 Παράδειγμα: import java.io.*; public class ReadAString2 { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter a string:"); String s = br.readLine(); System.out.println("Your string is: " + s); }

26 Βασική είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της μεθόδου ”read()” 26 Η μέθοδος read(), ορίζεται από την κλάση Input Stream της System. in που κάνει είσοδο της μορφής byte ροής. Η μέθοδος read() επιστρέφει ένα απρόσημο ακέραιο από 0 έως 255 ή -1. Η απλή της μορφή είναι : System.in.read(); // Είσοδος ενός byte System.in.read(byte b[]); //Είσοδος ενός αριθμού bytes σε πίνακα Σημείωση: Όπως προαναφέρθηκε, για τη χρήση της read() μεθόδου είναι απαραίτητη η σύνταξη throws IOException μετά τη main().

27 Βασική είσοδος δεδομένων από το πληκτρολόγιο με τη χρήση της μεθόδου ”read()” 27 Παράδειγμα : import java.io.*; public class ReadAChar2{ public static void main(String args[ ]) throws IOException { System.out.print("Enter a character: "); char c=(char)System.in.read(); System.out.println("Entered the character \""+c+"\""); }

28 Βασική έξοδος χαρακτήρων στην οθόνη με τη χρήση της μεθόδου ”write()” 28 Η μέθοδος write(), ορίζεται από την κλάση PrintStream της System.out που κάνει έξοδο της μορφής byte ροής. Η απλή της μορφή είναι : System.out.write(int x); // Έξοδος ενός byte System.out.write(byte b[]); //Έξοδος ενός αριθμού bytes από πίνακα Σημείωση: Για τη χρήση της write() μεθόδου είναι απαραίτητη η σύνταξη throws IOException μετά τη main().

29 Βασική έξοδος χαρακτήρων στην οθόνη με τη χρήση της μεθόδου ”write()” 29 Παράδειγμα: import java.io.*; public class WriteAChar { public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.print("Enter a character:"); char c = (char) br.read(); System.out.print(" \nYou entered: "); System.out.write(c); System.out.write('\n'); }

30 Βασική έξοδος συμβολοσειρών στην οθόνη με τη χρήση των μεθόδων ”print()” & ”println()” 30 Οι μέθοδοι print() και println() που έχετε ήδη χρησιμοποιήσει, ορίζονται από την κλάση PrintStream της System.out που κάνει έξοδο της μορφής byte – ροής. Η μόνη διαφορά μεταξύ των δύο μεθόδων είναι ότι μετά την εκτέλεση της println(), ο δρομέας πηγαίνει στην αρχή της επόμενης γραμμής, ενώ με τη χρήση της print(), ο δρομέας παραμένει στην ίδια γραμμή, στο τέλος των στοιχείων που εμφάνισε στην οθόνη. Η απλή τους μορφή είναι : System.out.println(String s); // Έξοδος string Σημείωση: Για τη χρήση των print() και println() μεθόδων, δεν είναι απαραίτητη η σύνταξη throws IOException μετά τη main().

31 Έξοδος δεδομένων στην οθόνη με τη χρήση της κλάσης ” PrintWriter ” 31 Εκτός από την εμφάνιση αποτελεσμάτων στην οθόνη, με την System.out μπορούμε να εμφανίσουμε κείμενα και αποτελέσματα χρησιμοποιώντας την κλάση PrintWriter. H PrintWriter χρησιμοποιείται περισσότερο στις πραγματικές εφαρμογές από ότι η System.out και υποστηρίζει τις μεθόδους print() και println() για έξοδο όλων των τύπων ακόμη και αντικειμένων ( με την κλήση της μεθόδου toString()). Για να γράψουμε στην οθόνη χρησιμοποιώντας την PrintWriter ορίζουμε πρώτα την System.out για τη δέσμη εξόδου. Η PrintWriter θα οδηγήσει τη δέσμη στην οθόνη μετά από κάθε νέα γραμμή.

32 Έξοδος δεδομένων στην οθόνη με τη χρήση της κλάσης ” PrintWriter ” 32 Για να γράψουμε στην οθόνη με την PrintWriter πρέπει πρώτα να ορίσουμε ένα αντικείμενο της, χρησιμοποιώντας έναν από τους δομητές που μας προσφέρει. Εμείς θα χρησιμοποιήσουμε την πιο απλή μορφή δομητή που είναι : PrintWriter(OutputStream outputstream, Boolean emptyTheOutputStream) όπου ορίζουμε το stream εξόδου και ορίζουμε την τιμή true ( ή false) αν θέλουμε να αδειάζει το stream όταν τελειώνει η εμφάνιση στην κονσόλα. Για παράδειγμα : PrintWriter pw = new PrintWriter(System.out, true); Δηλαδή ορίζουμε ένα αντικείμενο της PrintWriter που προσδιορίζει την System.out σαν stream εξόδου και την τιμή true για το άδειασμα του stream μετά την εμφάνιση των αποτελεσμάτων.

33 Έξοδος δεδομένων στην οθόνη με τη χρήση της κλάσης ” PrintWriter ” 33 Παράδειγμα : import java.io.*; public class ReadAChar3{ public static void main(String args[ ]) throws IOException { PrintWriter pw = new PrintWriter(System.out, true); System.out.print("Enter a character: "); char c=(char)System.in.read(); pw.println("Entered the character \""+c+"\""); }

34 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 34 Η κλάση PrintWriter, προσφέρει επίσης τις format() και printf () μεθόδους, οι οποίες είναι παρόμοιες με την print(), και μπορούν να αναπαραστήσουν την έξοδο με συγκεκριμένο τρόπο (format). Όπως και στην print(), η εμφάνιση γίνεται στην τρέχουσα γραμμή. Η System.out.printf και η System.out. format μπορεί να περιέχουν οποιοδήποτε αριθμό ορισμάτων. Το πρώτο όρισμα είναι πάντοτε ένα αλφαριθμητικό μορφοποίησης (format string) που εμπεριέχει έναν ή περισσότερους προσδιοριστές μορφοποίησης (format specifiers) για τα υπόλοιπα ορίσματα. Τα υπόλοιπα ορίσματα ( εκτός από το πρώτο ) είναι τιμές που θα εμφανιστούν στην οθόνη. Η μορφή της printf ()( ομοίως και της format()) είναι : System.out.printf( "format-string" [,όρισμα1, όρισμα2, … ]); (οι αγκύλες υποδηλώνουν προαιρετικές παραμέτρους)

35 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 35 Αλφαριθμητικό μορφοποίησης ( format string) Αποτελείται από λεκτικές σταθερές ( literals ) και προσδιοριστές μορφοποίησης ( format specifiers ). Τα ορίσματα απαιτούνται μόνο εάν υπάρχουν προσδιοριστές μορφοποίησης του αλφαριθμητικού μορφοποίησης ( format string ). Οι προσδιοριστές μορφοποίησης περιλαμβάνουν : σημαίες ( flags), πλάτος (width), ακρίβεια (precision) και μετατροπή χαρακτήρων (conversion character) με την ακόλουθη σειρά : % [flags] [width] [.precision] conversion-character (οι αγκύλες υποδηλώνουν προαιρετικές παραμέτρους)

36 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 36 Σημαίες ( Flags ) : - : αριστερή στοίχιση ( η προεπιλογή είναι να γίνει δεξιά στοίχιση ) + : έξοδος ένα συν (+) ή μείον (-) πρόσημο για μια αριθμητική τιμή 0 : γεμίζει αριθμητικές τιμές με μηδενικά ( η προεπιλογή είναι συμπλήρωση με κενά ), : κόμμα ( τελεία για Ελληνικές ρυθμίσεις ) ως διαχωριστής ομαδοποίησης (για αριθμούς >= 1000) : το κενό θα εμφανίσει αρνητικό πρόσημο εάν ο αριθμός είναι αρνητικός ή ένα κενό αν είναι θετικός

37 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 37 Πλάτος (Width): Καθορίζει το πλάτος του πεδίου για την έξοδο του ορίσματος και αντιπροσωπεύει τον ελάχιστο αριθμό χαρακτήρων που πρέπει να γραφτεί στην έξοδο. Περιλαμβάνει χώρο για αναμενόμενους διαχωριστές ομαδοποίησης και την υποδιαστολή στον προσδιορισμό του πλάτους για αριθμητικές τιμές. Ακρίβεια (Precision): Χρησιμοποιείται για να περιορίσει την έξοδο, ανάλογα με τη μετατροπή. Καθορίζει τον αριθμό των ψηφίων της ακρίβειας, όταν έχει έξοδο τιμές κινητής υποδιαστολής ή το μήκος ενός substring που εξάγεται από ένα string. Οι αριθμοί στρογγυλοποιούνται στην καθορισμένη ακρίβεια.

38 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 38 Χαρακτήρες Μετατροπής (Conversion-Characters): d : Δεκαδικός ακέραιος [byte, short, int, long] f : Αριθμός κινητής υποδιαστολής [float, double] c : Χαρακτήρας – Το κεφαλαίο %C θα κάνει κεφαλαίο το γράμμα s : String - Το κεφαλαίο %S θα κάνει κεφαλαία όλα τα γράμματα του string e : Εμφανίζει (όπως και το %E) έναν αριθμό κινητής υποδιαστολής σε εκθετική μορφή b : Εμφανίζει (όπως και το %B) λογικές τιμές (Boolean values) % : Εμφανίζει ένα % σύμβολο

39 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 39 Χαρακτήρες Μετατροπής (Conversion-Characters): h : Εμφανίζει (όπως και το %H) τη δεκαεξαδική μορφή ενός αριθμού o : Εμφανίζει την 8δική μορφή ενός αριθμού n : Νέα γραμμή – Η πλατφόρμα καθορίζει τη χρήση του %n αντί του \n για μεγαλύτερη συμβατότητα

40 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 40 Στους αριθμούς κινητής υποδιαστολής οι συντελεστές μορφοποίησης έχουν την παρακάτω μορφή : "%. f " Για παράδειγμα, ο "% 10.2f " και ο "%.2f " είναι δύο προσδιοριστές που χρησιμοποιούνται για την απεικόνιση των αριθμών με δεκαδικά ψηφία. Ο προσδιοριστής "%n. m f" σημαίνει : 1.έναρξη του προσδιοριστή με το σύμβολο % 2.εμφάνισε το πολύ n χαρακτήρες, δεξιά στοιχισμένους ( αν χρειαστεί γέμισε με κενά διαστήματα από αριστερά ) 3.εμφάνισε m ψηφία μετά την υποδιαστολή (.2) και τερμάτισε την εμφάνιση του αριθμού τύπου float

41 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 41 Στο δεύτερο παράδειγμα, ο προσδιοριστής "%.2f" σημαίνει ότι θα εμφανιστούν 2 δεκαδικά ψηφία μετά την υποδιαστολή και θα χρησιμοποιηθεί το μικρότερο δυνατό εύρος ψηφίων. XXXXXXX.XX m=2 n-(m+1)=71 n=10

42 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 42

43 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 43

44 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 44

45 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 45

46 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 46 Οι δύο παρακάτω εντολές, έχουν ακριβώς το ίδιο αποτέλεσμα εμφάνισης στην οθόνη : System.out.println ("Hello "+str); System.out.printf ("Hello %s", str);

47 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 47 Παράδειγμα : import java.io.*; public class Revolution{ public static void main(String args[ ]){ int day = 25; String month = "March"; String country = "Hellas"; int year = 1821; System.out.printf("Revolution on %dth %s, %d%n%n", day,month,year); System.out.printf("Country:%10s%n", country); }

48 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 48 Παράδειγμα: import java.io.*; public class marks1{ public static void main(String args[ ]){ String name1="Nikos"; String name2="Giannoula"; float marks1=15; float marks2=9.0f; System.out.format("%-10s : %4.1f%n",name1,marks1); System.out.format("%-10s : %4.1f%n",name2,marks2); }

49 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 49 Η κλάση String, έχει τη format() ως ισοδύναμη μέθοδο κλάσης, που επιστρέφει ένα αντικείμενο String και όχι ένα αντικείμενο PrintStream. Χρησιμοποιώντας τη μέθοδο format() σας επιτρέπεται να δημιουργήσετε μια μορφοποιημένη συμβολοσειρά που μπορείτε να επαναχρησιμοποιήσετε, σε αντίθεση με μια εφάπαξ δήλωση εκτύπωσης. String.format("%[argument number][flags][width] [.precision] type") Παράδειγμα: String str = String.format("Hello %s", "George"); System.out.println(str);

50 Μορφοποίηση εξόδου με τις μεθόδους ” printf() ” και ” format() ” 50 Παράδειγμα: import java.io.*; public class marks2{ public static void main(String args[ ]){ String name1="Nikos"; String name2="Giannoula"; float m1=15; float m2=9.0f; System.out.print(String.format("%-10s : %4.1f%n",name1,m1)); System.out.print(String.format("%-10s : %4.1f%n",name2,m2)); }

51 Μορφοποίηση δεδομένων Κλάση ”DecimalFormat” 51 Η κλάση DecimalFormat επιτρέπει τη μορφοποίηση των αριθμών με πολλούς διαφορετικούς τρόπους. 1.Εισαγωγή στο πρόγραμμα της « βιβλιοθήκης » text, με την εντολή : import java.text.DecimalFormat; στην αρχή της κλάσης, πριν την επικεφαλίδα της. 2.Δημιουργία αντικειμένου της κλάσης DecimalFormat: DecimalFormat df = new DecimalFormat("pattern"); ( το αντικείμενο ονομάστηκε df, αλλά θα μπορούσε να έχει οποιοδήποτε άλλη ονομασία, ενώ ο προσδιοριστής (pattern) σχηματίζεται από τα προκαθορισμένα σύμβολα )

52 Μορφοποίηση δεδομένων Κλάση ”DecimalFormat” 52 3.Χρήση του αντικειμένου που δημιουργήθηκε με τη μέθοδο format. df.format(number) Παράδειγμα: double d = 17.5; DecimalFormat df = new DecimalFormat ("###0.00"); String s = df.format (d); System.out.println (s); System.out.println (df.format(135.65);

53 Μορφοποίηση δεδομένων Κλάση ”DecimalFormat” 53 ΣύμβολοΠεριγραφή 0 Ένα ψηφίο - εμφανίζεται πάντα, ακόμη και αν ο αριθμός έχει λιγότερα ψηφία (τότε εμφανίζεται 0). # Ένα ψηφίο, τα αρχικά μηδενικά παραλείπονται.. Διαχωριστικό δεκαδικών ψηφίων, Διαχωριστικό ομαδοποίηση ς (π.χ. διαχωριστικό χιλιάδων) E Σηματοδοτεί το διαχωρισμό της mantissa και του εκθέτη για εκθετική μορφή. ; Διαχωρίζει θετικές και αρνητικές μορφές. - Σηματοδοτεί το αρνητικό πρόθεμα (prefix) του αριθμού.

54 Μορφοποίηση δεδομένων Κλάση ”DecimalFormat” 54 ΣύμβολοΠεριγραφή % Πολλαπλασιάζει επί 100 και δείχνει τον αριθμό ως ποσοστό \u2030 Πολλαπλασιάζει με 1000 και δείχνει τον αριθμό ως ανά μίλι. ¤ ή\u00A4 Σύμβολο νομίσματος - αντικαθίσταται από το σύμβολο του νομίσματος σύμφωνα με την τοπική ρύθμιση του υπολογιστή. Επίσης κάνει χρήση μορφοποίησης η νομισματικού διαχωριστικού δεκαδικών αντί για κανονική υποδιαστολή. ¤¤ (\u00A4\u00A4) - μορφοποίηση που χρησιμοποιεί διεθνή νομισματικά σύμβολα.

55 Μορφοποίηση δεδομένων Κλάση ”DecimalFormat” 55 ΣύμβολοΠεριγραφή X Σηματοδοτεί ένα χαρακτήρα που πρόκειται να χρησιμοποιηθεί ως πρόθεμα (suffix) ή επίθεμα (prefix) ενός αριθμού. Για παράδειγμα "0000GR" για τιμή 2002 εμφανίζει τον αριθμό με επίθεμα "GR" (2002GR). ' Χρησιμοποιείται για να κάνουμε χρήση των ειδικών χαρακτήρων ως πρόθεμα ή επίθεμα ενός αριθμού. Για παράδειγμα "'#'##" μορφοποιεί το 15 σε "#15". Για να δημιουργήσετε ένα μονό εισαγωγικό, χρησιμοποιείστε δύο εισαγωγικά στη σειρά: "# o''clock".

56 Μορφοποίηση δεδομένων Κλάση ”DecimalFormat” 56 PatternNumberFormatted String ###.###123.456123,456 ###.#123.456123,5 ###,###.##123456.789123.456,79 000.###9.95009,95 ##0.###0.950,95 $###,###.##15450.55$15.450,55 ###.##GRD340.75340,75GRD 0.0000E00150.351,5035Ε02 ###.## \u00A4\u00A4 ή ###.## ¤¤ 340.75340,75 EUR

57 Μορφοποίηση δεδομένων Κλάση ”DecimalFormat” 57 PatternNumberFormatted String -###.###123.456-123,456 ##0.00%0.550,00% 00.00;-00.0015.515,50 00.00;-00.00-15.50-15,50 00 o'' clock1515 o' clock '#'00015#015 000'#'15015# 000000\u203015015000?

58 Μορφοποίηση δεδομένων Κλάση ”DecimalFormat” 58 Παράδειγμα : import java.text.*; public class currency{ public static void main(String args[ ]) { DecimalFormat df1 = new DecimalFormat("\u0024###.##"); double dollar=1.06; DecimalFormat df2 = new DecimalFormat("\u00a3###.##"); double pound=0.7; DecimalFormat df3 = new DecimalFormat("\u00a5###.##"); double yen=129.75; System.out.println("Euro exchange rate"); System.out.println(df1.format(dollar)); System.out.println(df2.format(pound)); System.out.println(df3.format(yen)); } Δεν εμφανίζονται σωστά

59 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 59 Μία άλλη χρήσιμη κλάση για την είσοδο των δεδομένων του καθώς και της εμφάνισης των αποτελεσμάτων, είναι η JOptionPane. Αυτή βρίσκεται στην javax.swing βιβλιοθήκη και μας επιτρέπει να έχουμε παράθυρα εισόδου, όπως αυτό : Και παράθυρα μηνυμάτων όπως αυτό :

60 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 60 Το πρώτο πράγμα που πρέπει να κάνουμε είναι να δηλώσουμε στο πρόγραμμά μας τη βιβλιοθήκη που θα θέλαμε να χρησιμοποιήσουμε : import javax.swing.JOptionPane; Αυτό λέει στη Java ότι θέλουμε να χρησιμοποιήσουμε την JOptionPane κλάση, που βρίσκεται στη javax.swing βιβλιοθήκη. Είσοδος δεδομένων ( showInputDialog ) - Σύνταξη : μεταβλητή = JOptionPane.showInputDialog("Μήνυμα εισόδου" [," Κείμενο που θα εμφανίζεται μέσα στο πλαίσιο κειμένου"]) Εμφάνιση μηνύματος ( showMessageDialog) - Σύνταξη : JOptionPane.showMessageDialog(null, μεταβλητές_σταθερές[, "Μήνυμα γραμμής τίτλου", JOptionPane.εικονίδιο_παραθύρου]) (οι αγκύλες υποδηλώνουν προαιρετικές παραμέτρους)

61 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 61 Βλέποντας τη σύνταξη του showMessageDialog, παρατηρούμε ότι μέσα στις παρενθέσεις θα πρέπει να μπει πρώτα η λέξη null. Αυτή είναι μία λέξη - κλειδί της Java και απλά σημαίνει ότι το πλαίσιο μηνύματος δεν σχετίζεται με κάτι άλλο στο πρόγραμμα. Μετά από το κόμμα ακολουθούν οι μεταβλητές και / ή οι σταθερές που θέλουμε να προβάλουμε και οι παράμετροι " Μήνυμα γραμμής τίτλου ", JOptionPane. εικονίδιο _ παραθύρου που πάνε μαζί και είναι προαιρετικοί. Επίσης το πρόγραμμα τελειώνει με τον κώδικα : System.exit(0); Όπως υποδηλώνει το όνομά του, αυτό εξασφαλίζει την έξοδο από το πρόγραμμα και «καθαρίζει» για μας, αφαιρώντας από τη μνήμη όλα τα αντικείμενα που έχουν δημιουργηθεί.

62 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 62 Η παράμετρος JOptionPane.εικονίδιο_παραθύρου του showMessageDialog παίρνει τις παρακάτω τιμές: JOptionPane.INFORMATION_MESSAGE JOptionPane.ERROR_MESSAGE JOptionPane.PLAIN_MESSAGE (κανένα εικονίδιο) JOptionPane.QUESTION_MESSAGE JOptionPane.WARNING_MESSAGE

63 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 63 Παράδειγμα: import javax.swing.JOptionPane; public class message{ public static void main(String args[ ]){ String name; name = JOptionPane.showInputDialog("Enter your name"); JOptionPane.showMessageDialog( null, "Hello "+name ); System.exit(0); }

64 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 64 Παράδειγμα : String name = JOptionPane.showInputDialog("Name","Enter your name"); Παράδειγμα : JOptionPane.showMessageDialog( null, "Hello "+name, "Output", JOptionPane.INFORMATION_MESSAGE);

65 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 65 Παράδειγμα : JOptionPane.showMessageDialog( null, "Hello "+name,"Message", JOptionPane. ERROR_MESSAGE); Παράδειγμα : JOptionPane.showMessageDialog( null, "Hello "+name,"Message", JOptionPane. PLAIN_MESSAGE);

66 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 66 Παράδειγμα : JOptionPane.showMessageDialog( null, "Hello "+name,"Message", JOptionPane. QUESTION_MESSAGE); Παράδειγμα : JOptionPane.showMessageDialog( null, "Hello "+name,"Message", JOptionPane. WARNING_MESSAGE);

67 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 67 Παράδειγμα: import javax.swing.JOptionPane; public class sum{ public static void main(String args[ ]){ int x = Integer.parseInt(JOptionPane.showInputDialog("Enter 1st integer")); int y = Integer.parseInt(JOptionPane.showInputDialog("Enter 2nd integer")); JOptionPane.showMessageDialog(null, "Sum: "+(x+y)); System.exit(0); }

68 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 68

69 Είσοδος – Έξοδος με χρήση παραθύρων (Java Option Panes) 69 Για την εξαγωγή μορφοποιημένων αποτελεσμάτων μπορείτε να κάνετε χρήση της μεθόδου format() μέσω της κλάσης DecimalFormat καθώς και της String.. Παράδειγμα : DecimalFormat df = new DecimalFormat("00000"); ……… JOptionPane.showMessageDialog(null,"Sum: "+df.format(x+y)); ή JOptionPane.showMessageDialog(null, String.format("Sum: %05d",x+y));

70 Εξαιρέσεις (Exceptions) 70 Με τον όρο Εξαίρεση στον προγραμματισμό, αναφερόμαστε σε μία ένδειξη ότι κάτι συμβαίνει λάθος κατά την εκτέλεση ενός προγράμματος. Η Java διαθέτει μηχανισμούς διαχείρισης των εξαιρέσεων (Exception handling) που μπορεί να συμβούν κατά τη διάρκεια της εκτέλεσης ενός προγράμματος, έτσι ώστε να μπορέσει να συνεχίσει ή τουλάχιστο να τερματίσει την εκτέλεσή του με ελεγχόμενο τρόπο. Μία εξαίρεση περιέχει πληροφορίες για το τι έχει συμβεί και χάρη σε αυτούς τους μηχανισμούς μπορούν να φτιαχτούν πιο αξιόπιστα και πιο ανεκτικά σε σφάλματα προγράμματα.

71 Εξαιρέσεις (Exceptions) 71 Όταν ένα αναπάντεχο συμβάν προκύψει κατά την εκτέλεση ενός προγράμματος Java, π. χ. διαίρεση δια του μηδέν, το πρόγραμμα ρίχνει (throws) μία εξαίρεση και το σύστημα προσπαθεί να βρει τον κατάλληλο διαχειριστή εξαιρέσεων για να το διαχειριστεί. Ένας διαχειριστής εξαιρέσεων (exception handler) μπορεί να πιάσει (catch), δηλαδή να αναλάβει να διαχειριστεί κάποια εξαίρεση, βάσει του τύπου της και του τύπου που ορίζεται στη δήλωση του catch. Αν η Java δε βρει τον κατάλληλο διαχειριστή εξαιρέσεων για να το διαχειριστεί, χρησιμοποιείται ο προκαθορισμένος διαχειριστής εξαιρέσεων (default exception handler), ο οποίος εκτυπώνει κάποιες πληροφορίες και ακολούθως τερματίζεται η εκτέλεση του προγράμματος.

72 Εξαιρέσεις (Exceptions) 72 Στην Java μία εξαίρεση είναι αντικείμενο της κλάσης Throwable ή κάποιας υποκλάσης της. Οι κλάσεις που παράγονται από την Error χρησιμοποιούνται για σημαντικά λάθη του συστήματος, όπως για παράδειγμα το λάθος OutOfMemoryError ( από τα οποία συνήθως δε μπορούμε να ανακάμψουμε ), ενώ οι κλάσεις που παράγονται από την Exception και την RuntimeException ( π. χ. το ArithmeticException), χρησιμοποιούνται για συνηθισμένα λάθη τα οποία το πρόγραμμα μπορεί να θέλει να πιάσει και να ανακάμψει από αυτά.

73 Εξαιρέσεις (Exceptions) 73

74 Εξαιρέσεις (Exceptions) 74 Κάποιες γνωστές Run time exceptions είναι οι ακόλουθες : ArithmeticException: παράδειγμα η διαίρεση µ ε το 0. ArrayIndexOutOfBoundsException: πρόσβαση σε στοιχείο πίνακα σε θέση που δεν υπάρχει. ArrayStoreException: προσπάθεια αποθήκευσης λάθος τύπου δεδομένων στοιχείου σε πίνακα. StringIndexOutOfBoundsException: για παράδειγμα αναφορά σε σύμβολο στην 10 η θέση μιας συμβολοσειράς µ ε 8 θέσεις. NullPointerException: η εφαρμογή προσπαθεί να χρησιμοποιήσει ένα αντικείμενο που είναι null. ClassCastException: λανθασμένο casting.

75 Εξαιρέσεις (Exceptions) 75 Standard Java exception classes

76 Εξαιρέσεις (Exceptions) 76 Κάποιες γνωστές Error exceptions είναι οι ακόλουθες : InternalError: σηματοδοτήσει ένα εσωτερικό σφάλμα της εικονικής μηχανής. NoClassDefFoundError: δε μπορεί να βρεθεί ο ορισμός μίας κλάσης. StackOverflowError: ένα σφάλμα υπερχείλισης στοίβας συμβαίνει εντός της εικονικής μηχανής. UnknownError: ένα σφάλμα άγνωστης προέλευσης ανιχνεύεται στο σύστημα χρόνου εκτέλεσης. Όλα τα σφάλματα και η σημασία τους εδώ : http://docstore.mik.ua/orelly/java/langref/ch09_04.htm

77 Εξαιρέσεις (Exceptions) 77 Standard Java error classes

78 Εξαιρέσεις (Exceptions) 78 Για να δηλώσετε ένα πιθανόν λάθος και να το διορθώσετε πρέπει πρώτα να το στείλετε στον κατάλληλο κώδικα και αυτό γίνεται με την εντολή throw. Η γενική μορφή της εντολής είναι : throw ; Όπως προαναφέρθηκε, η throw διακόπτει την φυσική ροή του προγράμματος και προσπαθεί να βρει ένα διαχειριστή εξαιρέσεων για τον τύπο της εξαίρεσης που συνέβη. Ο διαχειριστής εξαιρέσεων είναι ένα κομμάτι κώδικα που διαχειρίζεται το ειδικό λάθος που προέκυψε. Ο κώδικας αυτός είτε ανακαλύπτει το λάθος είτε προκαλεί έξοδο από το πρόγραμμα αν αυτό δεν μπορεί να ανακαλυφθεί. Τρεις εντολές χειρίζονται τις εξαιρέσεις οι : try, catch και finally.

79 Εξαιρέσεις (Exceptions) 79 Παράδειγμα : Ο παρακάτω κώδικας διαχειρίζεται λάθος ( διαίρεση δια του 0) public class test{ public static void main(String args[]) { int a = Integer.valueOf(args[0]); int b = Integer.valueOf(args[1]); if (b==0) { throw new ArithmeticException("You can\'t divide by 0!"); } else { System.out.println("Result: "+(a/b)); }

80 Εξαιρέσεις (Exceptions) 80 Σύνταξη :

81 Εξαιρέσεις (Exceptions) 81 Η εντολή try περιέχει ένα κομμάτι κώδικα στο οποίο στέλνεται μία εξαίρεση. Αν συμβεί η εξαίρεση που έχει προβλέψει ο κώδικας της try, τότε μία εντολή catch με τον κατάλληλο κώδικα θα χειριστεί τον τύπο της εξαίρεσης. Εάν δεν συμβεί εξαίρεση στο τμήμα του κώδικα της try, τότε το κομμάτι του κώδικα της catch δεν εκτελείται. H εντολή finally, που συνοδεύει πάντα την try, περιέχει ένα κομμάτι κώδικα που εκτελείται είτε συμβεί λάθος είτε όχι μέσα στην try.

82 Εξαιρέσεις (Exceptions) 82 Παράδειγμα : Ο παρακάτω κώδικας προκαλεί λάθος ( διαίρεση δια του μηδενός ) public class test{ public static void main(String args[]) { int a = 10; int b = 0; int x=a/b; System.out.println("Result: "+x); }

83 Εξαιρέσεις (Exceptions) 83 Επειδή συμβαίνει λάθος στην διαίρεση δημιουργείται εξαίρεση και το πρόγραμμα τερματίζει. Επειδή δεν έχουμε προγραμματίσει κώδικα χειρισμού της εξαίρεσης αναλαμβάνει δράση ο χειριστής εξαιρέσεων της J ava. Αυτός με την σειρά του εμφανίζει το μήνυμα της εξαίρεσης καθώς και ένα αντίγραφο της μνήμης στο σημείο που συνέβη, ενώ παράλληλα τερματίζει και την εκτέλεση του προγράμματος. Για να αποφύγετε μία τέτοια κατάσταση λάθους θα χρησιμοποιήσετε μία try – catch εντολή. Με τον τρόπο αυτό θα αποφύγετε το λάθος και τον απρόσμενο τερματισμό του προγράμματος. Στην try γράφετε τον κώδικα που υποθέτετε ότι θα προκαλέσει το λάθος και στην catch τον κώδικα που θα « πιάσει » το λάθος δηλαδή, τον τύπο της εξαίρεσης που περιμένετε.

84 Εξαιρέσεις (Exceptions) 84 Παράδειγμα : public class Division1{ public static void main(String args[]) { int a,b,x; try { a = 10; b = 0; x=a/b; System.out.println("Result: "+x); }

85 Εξαιρέσεις (Exceptions) 85 Παράδειγμα - συνέχεια : catch (ArithmeticException e) { System.out.println("Error! Divided By Zero"); } Μπορείτε να εμφανίσετε τον τύπο της εξαίρεσης τροποποιώντας την εντολή catch: catch (ArithmeticException e) { System.out.println("Exception: " + e); }

86 Εξαιρέσεις (Exceptions) 86 Παράδειγμα : import java.util.*; public class Division2 { public static void main(String args[ ]) { int a, b, result; Scanner read = new Scanner(System.in); System.out.println("Input two integers"); a = read.nextInt(); b = read.nextInt(); try { result = a / b; System.out.println("Result = " + result); }

87 Εξαιρέσεις (Exceptions) 87 Παράδειγμα - συνέχεια : catch (ArithmeticException e) { System.out.println("Exception caught: Division by zero."); } finally { read.close(); System.exit(0); }

88 Εξαιρέσεις (Exceptions) 88 Ο υψηλότερη στην ιεραρχία των κλάσεων είναι η κλάση της εξαίρεσης που συντάσσετε στην catch τόσο περισσότερα λάθη πιάνετε, όπως στο παρακάτω παράδειγμα : import java.io.*; public class test{ public static void main(String args[ ]) throws IOException { BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); try { System.out.print("Enter a number: "); int x=Integer.parseInt(read.readLine()); System.out.println("X= "+x); }

89 Εξαιρέσεις (Exceptions) 89 catch (Exception exc) { System.out.println("Error: " + exc); } finally { read.close(); System.exit(0); }

90 Εξαιρέσεις (Exceptions) 90 Δηλαδή μπορούμε να πιάσουμε περισσότερα είδη εξαιρέσεων αν δηλώσουμε στην catch κάποια πιο γενική υπερκλάση όπως π. χ. την RuntimeException ή την Exception. Ο τύπος Throwable πιάνει όλες τις εξαιρέσεις. Συνήθως όμως χρησιμοποιούμε πολλές catch εντολές. Επίσης μπορούμε να χρησιμοποιήσουμε εστιασμένες try και catch εντολές.

91 Πηγές 91 http://homeandlearn.co.uk/index.html Εισαγωγή στην Java 2 – Γεώργιος Λιακέας http://tutorials.jenkov.com/java- internationalization/decimalformat.html Αλγοριθμική και προγραμματισμός με Java – Παναγ. Σφέτσος Οντοκεντρικός Προγραμματισμός - Ιωάννης Χατζηλυγερούδης https://www.cs.colostate.edu/~cs160/.Fall15/resources/Java_pri ntf_method_quick_reference.pdf http://www.javawithus.com/tutorial/displaying-text-using-printf- method http://alvinalexander.com/programming/printf-format-cheat- sheet http://developer.android.com/reference/java/util/Formatter.html


Κατέβασμα ppt "Είσοδος – Έξοδος – Μορφοποιήσεις - Εξαιρέσεις στη Java Ειδικά Θέματα στον Προγραμματισμό Υπολογιστών 1 Βελώνης Γεώργιος – Καθηγητής Πληροφορικής ΠΕ 20."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google