Είσοδος και Έξοδος (Input and Output) Διδάσκοντες: Νικόλας Νικολάου Εαρινό Εξάµηνο 2013/14 Τι θα δούµε σήµερα Συσκευές Εισόδου / Εξόδου Εκτύπωση στο StdOut Ανάγνωση δεδοµένων από Γραµµή Εντολής Ανάγνωση Δεδοµένων µε τη χρήση της Scanner Ανάγνωση Δεδοµένων µε τη χρήση της βιβλιοθηκης StdIn 1
Είσοδος και Έξοδος Μονάδες Εισόδου Πληκτρολόγιο Ποντίκι Σκληρός Διαδίκτυο Ψηφιακή κάµερα Μικρόφωνο δίσκος Μονάδες Εξόδου Οθόνη Ηχεία Σκληρός δίσκος Διαδίκτυο Εκτυπωτής MP3 Player Στόχος: Τα προγράµµατα µας σε Java να επικοινωνούν µε τον έξω κόσµο Input and Output Μονάδες Εισόδου Πληκτρολόγιο Ποντίκι Σκληρός Διαδίκτυο Ψηφιακή κάµερα Μικρόφωνο Δίσκος Μονάδες Εξόδου Οθόνη Ηχεία Σκληρός Διαδίκτυο Εκτυπωτής MP3 Player δίσκος Η προσέγγισή µας Ορίζουµε στη Java βιβλιοθήκες µε συναρτήσεις εισόδου και εξόδου Χρησιµοποιούµε το λειτουργικό σύστηµα για να συνδέσουµε τα προγράµµατά µας µε αρχεία, το ένα µε το άλλο, το πληκτρολόγιο, το ποντίκι, την οθόνη, και τα ηχεία. 2
Το Πρόγραµµα «Digital Michelangelo» Στόχος: Η ακριβής τρισδιάστατη περιγραφή του αγάλµατος Laser rangefinder. 5,000 ώρες σάρωσης, 32 Gigabytes! Τερµατικό Τερµατικό: Εφαρµογή όπου µπορεί να πληκτρολογείς εντολές προς το λειτουργικό σύστηµα Mac OS X Microsoft Windows 3
Η Παλαιότερη Αντίληψη Η Σύγχρονη Αντίληψη 4
Είσοδος από Γραµµή-Εντολής vs. Standard Είσοδος Είσοδοι από γραµµή-εντολής Χρησιµοποιούµε εισόδους από τη γραµµή εντολής για την εισδοχή µικρού αριθµού τιµών από το χρήστη Δεν αποτελεί πρακτικό µέσο εισδοχής για µεγάλο αριθµό τιµών Οι τιµές εισάγονται πριν να αρχίσει η εκτέλεση του προγράµµατος Standard είσοδος Ευέλικτη διασύνδεση µε το λειτουργικό σύστηµα για είσοδο Ως προεπιλογή, το stdin παραλαµβάνεται από Τερµατικό παράθυρο Τιµές µπορούν να εισαχθούν κατά την εκτέλεση του προγράµµατος, παρέχοντας έτσι στο πρόγραµµα τη δυνατότητα του διαλογικού στοιχείου Είσοδος από τη Γραµµή-Εντολής και Standard Έξοδος Είσοδος από τη γραµµή-εντολής (command-line input): Διαβάζουµε ένα ακέραιο N ως όρισµα της γραµµής-εντολής Standard έξοδος Ευέλικτη διασύνδεση µε το λειτουργικό σύστηµα για έξοδο Στην Java, έξοδος από την System.out.println() διοχετεύεται στο stdout. Ως προεπιλογή, το stdout διοχετεύεται στο Τερµατικό public class RandomSeq { public static void main(string[] args) { int N = Integer.parseInt(args[0]); for (int i = 0; i < N; i++) { System.out.println(Math.random()); % java RandomSeq 4 0.9320744627218469 0.4279508713950715 0.08994615071160994 0.6579792663546435 5
Standard Είσοδος µε Χρήση της Scanner Standard Input Διασύνδεση µε το λειτουργικό σύστηµα για είσοδο δεδοµένων Χρησιµοποιούµε την κλάση Scanner. Εισαγωγή βιβλιοθήκης: import java.util.scanner; Δηµιουργία αντικειµένου τύπου Scanner Scanner scan = new Scanner(System.in); Δήλωση τύπου της εισόδου που θέλουµε να διαβάσουµε scan.nextint() /*διάβασε την επόµενη είσοδο ως ακέραιο*/ scan.nextdouble() /*διάβασε την επόµενη είσοδο ως πραγµατικό*/ Standard Είσοδος µε Χρήση της Scanner import java.util.scanner; public class Add { public static void main(string[] args) { Scanner scan = new Scanner(System.in); System.out.print("Type the first integer: "); int x = scan.nextint(); System.out.print("Type the second integer: "); int y = scan.nextint(); int sum = x + y; System.out.println("Their sum is " + sum); % java Add Type the first integer: 1 Type the second integer: 2 Their sum is 3 6
Standard Είσοδος µε Χρήση της Βιβλιοθήκης StdIn Standard είσοδος: Παρέχεται η βιβλιοθήκη StdIn για την εισαγωγή κειµένου StdIn: Χρησιµοποιεί Εσωτερικά την Βιβλιοθήκη Scanner http://introcs.cs.princeton.edu/java/stdlib/stdin.java.html Για χρήση: Κατεβάζουµε την βιβλιοθήκη StdIn.java από την ιστοσελίδα του βιβλίου και την αποθηκεύουµε στο φάκελο εργασίας. Υπολογισµός Μέσου Όρου µιας Ακολουθίας Αριθµών Κλάση Average: Διαβάζονται οι αριθµοί ένας προς ένας, και εκτυπώνεται ο µέσος όρος τους public class Average { public static void main(string[] args) { double sum = 0.0; // cumulative total int n = 0; // number of values while (!StdIn.isEmpty()) { double x = StdIn.readDouble(); sum = sum + x; n++; StdOut.println(sum / n); % java Average 10.0 5.0 6.0 3.0 7.0 32.0 <Ctrl-d> 10.5 7
Επανα-κατευθύνοντας την Standard Έξοδο Επανα-κατευθύνοντας την standard έξοδο: Χρησιµοποιούµε το directive του λειτουργικού συστήµατος (>) για να επανα-κατευθύνουµε την standard έξοδο σε κάποιο αρχείο για µόνιµη αποθήκευση (αντί για το τερµατικό παράθυρο) % java RandomSeq 1000 > data.txt redirect stdout Επανα-κατευθύνοντας την Standard Είσοδο Επανα-κατευθύνοντας την standard είσοδο: Χρησιµοποιούµε το directive του λειτουργικού συστήµατος (<) για να επανα-κατευθύνουµε την standard είσοδο σε κάποιο αρχείο, δηλαδή να διαβάζουµε στοιχεία από το αρχείο (αντί από το τερµατικό παράθυρο) % more < data.txt 0.5475375782884312 0.4971087292684019 0.23123808041753813 redirect stdin % java Average < data.txt 0.4947655567740991 8