/* ************************************************************************
* Abbiamo visto come stampare a video, ora vedremo come far immettere da
* tastiera dei valori.
* Qua la situazione si complica, infatti dovremo leggere una stringa,
* gestendo tra l'altro il caso in cui si verifichi un errore, poi
* convertirla nel formato della nostra variabile (float).
* Le stringhe in Java sono considerate come oggetti, non si tratta di
* array di char con zero terminale. La dichiarazione di una stringa e'
* simile a quella di un int o un float:
*
* String miastringa;
*
* Per leggere una stringa da tastiera, occorre usare il metodo readLine()
* di DataInputStream, che estende (e' derivata da) FilterInputStream, che
* a sua volta estende java.io.InputStream.
* Per accedere a DataInputStream.readLine() occorre istanziare un oggetto
* di tipo DataInputStream. In java per istanziare un oggetto si usa
* l'operatore new (nuovo), in questo modo:
*
* DataInputStream leggilo = new DataInputStream(System.in);
*
* Al costruttore passiamo lo stream (flusso) da cui prendere input, che
* nel nostro caso e' System.in.
* Ora abbiamo un DataInputStream chiamato leggilo, che possiamo usare
* per leggere una stringa:
*
* miastringa = leggilo.readLine(); // leggo stringa da tastiera
*
* Ora dobbiamo convertire "miastringa" in un valore float, e salvarla.
*
* vara = Float.valueOf(stringa).floatValue(); // e la converto in float.
*
* Sono disponibili anche Integer.valueOf(), Double.valueOf(), eccetera.
* Il .floatValue() finale indica che si consideri anche la parte decimale,
* dopo la virgola (o, meglio, il punto). Se si fosse specificato:
*
* vara = Float.valueOf(stringa).intValue();
*
* La stringa sarebbe convertita in float, ma senza la parte dopo la virgola,
* ad esempio 23.43 sarebbe convertito come 23.
* Come se non bastasse, occorre gestire l'eventualita' di un errore, che
* genererebbe un'eccezione. Le eccezioni vengono generate in caso di
* errore durante l'esecuzione, e servono per far eseguire delle istruzioni
* di emergenza, come la stampa di messaggi di errore e l'interruzione del
* programma.
* Per gestire le eccezioni si usa la coppia di istruzioni try e catch.
* Try significa "prova", e catch "afferrare,cogliere".
* Occorre mettere l'istruzione che puo' generare eccezioni nel blocco di
* try: "prova ad eseguire questa istruzione". Subito dopo, occorre mettere
* il catch, e nel suo blocco le istruzioni da eseguire in caso di errore:
* "Se e' avvenuta una eccezione, acchiappala e fai le x operazioni di
* emergenza". Il tutto applicato al nostro input:
*
* try {
* stringa = leggilo.readLine(); // leggo stringa da tastiera
* vara = Float.valueOf(stringa).floatValue(); // e la converto in float.
* }
* catch (Exception e) {
* System.out.println("Errore: " + e + " nella lettura da tastiera");
* System.exit(0);
* }
*
* Come si vede, si provano ad eseguire la lettura e la conversione da
* tastiera, e in caso di errore di stampa un messaggio, contenente il
* nome dell'eccezione (al catch e' passata l'eccezione, che ha il nome
* "e", stampabilissimo), e si termina l'esecuzione con la funzione
* System.exit().
************************************************************************ */
import java.io.*; // Include le funzioni I/O standard di base.
import java.lang.Math.* // Include le funzioni matematiche (per il PI)
class Jlez1e { // Da qua inizia la classe Jlez1e
public static void main(String args[]) // Definiamo il metodo Main.
{ // Inizio del main()
float vara = 0, varb = 0; // Dichiaro 2 variabili float
String stringa; // Dichiaro una stringa
System.out.println("\nDammi il primo numero:"); // stampo il messaggio
// Si istanzia un oggetto DataInputStream il cui stream (flusso) e' il
// System.in (ossia l'input da tastiera) per usare il suo metodo readLine().
DataInputStream leggilo = new DataInputStream(System.in);
// Lettura di un numero da tastiera e suo salvataggio in una variabile float
// In caso di errore si genera un'eccezione, che fa stampare un messaggio
// di errore, e si termina l'esecuzione.
try {
stringa = leggilo.readLine(); // leggo stringa da tastiera
vara = Float.valueOf(stringa).floatValue(); // e la converto in float.
}
catch (Exception e) {
System.out.println("Errore: " + e + " nella lettura da tastiera");
System.exit(0);
}
System.out.println("\nDammi il secondo numero:"); // Stampo il messaggio
// Ripeto le operazioni try-catch per leggere un'altro float.
try {
stringa = leggilo.readLine(); // leggo stringa da tastiera
varb = Float.valueOf(stringa).floatValue(); // e la converto in float.
}
catch (Exception e) {
System.out.println("Errore: " + e + " nella lettura da tastiera");
System.exit(0);
}
float varc = vara+varb; // Assegno a varc il valore di vara+varb
// Ora stampiamo a video il valore delle 3 variabili
System.out.println("\nSomma di " +vara+ " e " +varb+ " = " +varc);
} // Fine del metodo principale Main()
} // Fine della classe Jlez1e
/* ************************************************************************
* Se volete provare il funzionamento del try-catch, basta fare in modo
* che un errore generi un'eccezione. Ad esempio, provate ad inserire
* delle lettere anziche' un numero, o ad andare a capo senza scrivere
* niente, e il programma si blocchera' stampando il tipo di eccezione:
* java.lang.NumberFormatException, ossia errore di formato del numero.
************************************************************************ */
