13/08/02Input 1 Interagire con il computer Da tastiera Da riga di comando Funzioni di conversione
13/08/02 Input2 Input da tastiera Lo standard input di un computer è visto attraverso l’oggetto predefinito System.in Questo oggetto mette a disposizione un numero limitato di operazioni Esistono delle classi predefinite che a partire da questo oggetto creano nuovi oggetti con maggiori funzionalità La classe InputStreamReader Un InputStreamReader converte una sequenza di byte in una sequenza di caratteri.in accordo con uno specifico sistema di codifica. La classe BufferedReader Un BufferedReader legge una sequenza di caratteri, la memorizza in un buffer in modo da fornire funzioni per la lettura di intere linee. 1.InputStreamReader reader = new InputStreamReader(System.in); 2.BufferedReader console = new BufferedReader(reader); Dopo queste operazioni posso utilizzare l’oggetto console e il metodo readLine() in grado di restituirmi una linea da tastiera (tutti i caratteri immessi fino alla pressione di un fine linea) sotto forma di stringa. String line = console.readLine();
13/08/02 Input3 Il paradigma ad oggetti I programmi in generale non gestiscono solo numeri e caratteri, ma devono gestire dati più complessi che rappresentano più da vicino la realtà. Ad esempio informazioni relative agli studenti, i conti bancari, ecc. I linguaggi di programmazione orientati agli oggetti sono adatti a trattare questi tipi di dati o oggetti.
13/08/02 Input4 Un programma (o applicazione) è usato da un utente per far eseguire un insieme di operazioni a un calcolatore ciascuna operazione costituisce uno strumento per l’utente del programma l’esecuzione di ciascuna operazione corrisponde allo svolgimento di una sequenza di azioni da parte del calcolatore. Un programma mostra a un utente la rappresentazione, nel calcolatore, di una porzione di mondo reale o virtuale la porzione di mondo rappresentata da un programma è la realtà di interesse del programma un programma rappresenta nel calcolatore i dati e le operazioni di una certa realtà di interesse. La nozione di programma percepita da chi realizza programmi è complementare a quella percepita dall’utente
13/08/02 Input5 Programma Monete5.java 1.import java.io.BufferedReader; 2.import java.io.InputStreamReader; 3.import java.io.IOException; 4. 5.public class Monete5 { public static void main(String[] args) throws IOException { 8. final double VAL1CENT = 0.01; 9. final double VAL10CENT = 0.10; 10. final double VAL20CENT = 0.20; InputStreamReader reader 13. = new InputStreamReader(System.in); 14. BufferedReader console 15. = new BufferedReader(reader); 16. Ho definito 3 costanti di tipo double console è un oggetto per gestire l’input da terminale
13/08/02 Input6 Programma Monete5.java 17. System.out.print("Quante monete da 1 centesimo hai? "); 18. int unCent = Integer.parseInt(console.readLine()); System.out.print("Quante monete da 10 centesimi hai? "); 21. int dieciCent = Integer.parseInt(console.readLine()); System.out.print(" Quante monete da 20 centesimi hai? "); 24. int ventiCent = Integer.parseInt(console.readLine()); double totale = unCent * VAL 1CENT + dieciCent * VAL 10CENT + ventiCent * VAL 20CENT ; 27. System.out.println("Valore totale = " + totale); 28. } 29.} console.readLine() legge una riga da tastiera e la restituisce come stringa Integer.parseInt() analizza una stringa e restituisce il corrispondente valore intero total è una variabile floating-point è buona norma stampare una frase di richiesta prima di ogni operazione di lettura da tastiera
13/08/02 Input7 Esecuzione Monete5.java E:\Java\esempi\Monete> java Monete5 Quante monete da 1 centesimo hai? 2 Quante monete da 10 centesimi hai? 3 Quante monete da 20 centesimi hai? 5 Valore totale = 1.32 E:\Java\esempi\Monete>
13/08/02 Input8 Funzioni di conversione Le classi Integer, Double, Boolean … mettono a disposizione una serie di metodi di conversione che restituiscono un valore numerico a partire da una stringa. In particolare sono utili: Integer.parseInt(stringa) Double.parseDouble(stringa) Integer.parseInt( “12”) restituisce il valore intero 12 Double.parseDouble( “12.5”) restituisce il valore double 12.5 Versioni non recenti di Java non hanno parseDouble in alternativa si può usare (new Double(stringa)).doubleValue()
13/08/02 Input9 Riutilizzo del software Come evitare di riscrivere tutte le volte il codice che mi serve per gestire l’input? Posso definire una classe che mi mette a disposizione dei metodi opportuni e poi utilizzare questi (allo stesso modo della classe Math )
13/08/02 Input10 MyUtility.java 1.import java.io.*; 2. 3.public class MyUtility { private static BufferedReader console = 6. new BufferedReader(new InputStreamReader(System.in)); public static String readLine(String prompt) { 9. try { 10. System.out.print(prompt); 11. return console.readLine(); 12. } 13. catch(IOException e) { 14. System.err.println(e); 15. System.exit(1); 16. } 17. return null; 18. } 19. readLine legge una riga da tastiera, presentando un messaggio di richiesta try/catch servono per gestire condizioni di errore err corrisponde allo standard error di Unix, System.exit forza la terminazione del programma L’istruzione return forza l’uscita dal metodo in esecuzione specificando il valore che deve essere restituito
13/08/02 Input11 MyUtility.java 20. /** 21. readInt – legge un intero da tastiera, 22. presentando un messaggio di richiesta, 23. sfrutta readLine 24. */ 25. public static int readInt(String prompt) { 26. return Integer.parseInt(readLine(prompt)); 27. } /** 30. readDouble – legge un double da tastiera, 31. presentando un messaggio di richiesta, 32. sfrutta readLine 33. */ 34. public static double readDouble(String prompt) { 35. return Double.parseDouble(readLine(prompt)); 36. } 37.} Double.parseDouble si comporta in maniera simile a Integer.parseInt solo le versioni recenti di Java lo implementano Integer.parseInt restituisce il valore intero corrispondente alla stringa
13/08/02 Input12 Somma.java Una volta compilata MyUtility.java posso utilizzare i metodi pubblici definiti (purché il file MyUtility.class sia in una directory compresa in CLASSPATH ) allo stesso modo dell’uso delle funzioni matematiche della classe Math, non posso invece utilizzare la variabile console perché definita private (non accessibile, serve solo ai diversi metodi per uso interno) 1.// Somma.java legge due numeri da tastiera 2.// e stampa la loro somma 3. 4.public class Somma { public static void main(String[] args) { 7. int a = MyUtility.readInt("a="); 8. int b = MyUtility.readInt("b="); 9. System.out.println("a+b="+(a+b)); 10. } }
13/08/02 Input13 Somma.java E:\Java\esempi\Somma> java Somma a=3 b=5 a+b=8 E:\Java\esempi\Somma>
13/08/02 Input14 Usare parametri ai comandi Come i comandi UNIX così anche I programmi java possono usare parametri: I parametri posti sulla riga di comando sono utilizzabili attraverso la variabile args (un vettore di stringhe) del metodo main Attraverso il campo length posso sapere quanti dati ho a disposizione, i vari parametri sono accessibili come args[0] il primo parametro args[1] il secondo args[2] il terzo …
13/08/02 Input15 Uso di parametri da riga di comando 1.// Somma2.java somma due valori dati come parametri del programma 2.// e stampa il risultao 3.public class Somma2 { 4.public static void main(String[] args) { 5.int a = Integer.parseInt(arg[0]); 6.int b = Integer.parseInt(arg[1]); 7.System.out.println("a+b="+(a+b)); 8.} 9.} E:\Java\esempi\Somma> java Somma2 3 5 a+b=8 E:\Java\esempi\Somma>