JAVA – Come si legge da tastiera in una console application, in questa lezione
- Lettura da standard input
- Conversione da String a int/double
- Conversione da String ad altri tipi di dato
- Link utili
Lettura da standard input
Per leggere da stdin in Java, dobbiamo utilizzare alcuni oggetti fondamentali, ovvero InputStreamReader e BufferedReader . Nel codice sottostante mostro una tipica implementazione con successivo output.
package BasicOperations;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class InOut {
public static void main(String[] args) {
// creo l'oggeto per leggere da Standard Input
InputStreamReader in=new InputStreamReader(System.in);
BufferedReader keyboard=new BufferedReader(in);
// variabili
String name;
try{
System.out.println("Come ti chiami?");
name=keyboard.readLine();
System.out.println("Ciao: "+name);
}catch (IOException e){
// gestione dell'eccezione
}
}
}
Leggere da tastiera interi e double
Nel caso dovessimo leggere numeri interi, ovviamente dovremo convertirli per poterli utilizzare con qualsiasi operazione aritmetica. Per esempio, chiedo l’anno di nascita e calcolo l’età dell’utente come nel seguente questo snippet di codice
String strYOB; // YOB= year of birthday
Integer intYOB;
Integer currentYear;
Calendar calendar;
try{
System.out.println("In che anno sei nato?");
strYOB= keyboard.readLine();
intYOB=Integer.parseInt(strYOB);
// ottengo l'anno corrente
calendar=GregorianCalendar.getInstance();
currentYear=calendar.get(Calendar.YEAR);
System.out.println("Hai " + (currentYear-intYOB) +" anni");
}catch (IOException e){
// gestione dell'eccezione
}
Un’analoga procedura ci permette di convertire una stringa in Double e per risparmiare tempo possiamo passare l’invocazione del metodo readLine() dell’oggetto keyboard come parametro per il metodo statico parseDouble della classe Double nel seguente modo:
Double ticketPrice;
System.out.println("Quanto ti è costato il biglietto del bus?");
ticketPrice=Double.parseDouble(keyboard.readLine());
IMPORTANTE: quando usiamo operazioni si lettura da standard input si possono generare eccezioni, e come sappiamo, Java ci “obbliga” a gestirle. L’eccezione che dovremmo gestire con il costrutto try-catch è la IOException, ovvero una eccezione di Input/Output.
L’exception handling di Java deriva direttamente (anche da un punto di vista sintattico) da quello del linguaggio C++. Tuttavia, il meccanismo di Java deve considerarsi decisamente più oneroso, ma certamente più sicuro, grazie alla cosiddetta regola dello handle or declare (gestisci o dichiara), che in sostanza obbliga il programmatore a prevedere esplicite contromisure per ogni situazione anomala (prevedibile).
Conversioni per gli altri tipi di dati in Java
boolean answer=Boolean.parseBoolean(keyboard.readLine());
Float latitude=Float.parseFloat(keyboard.readLine());
strYOB=String.valueOf(intYOB);
- Riga 1 convertiamo da stringa (true/false) nel corrispettivo valore booleano
- Riga 2 convertiamo da stringa in un valore float
- Riga 3 possiamo anche convertire un intero in una stringa
Il metodo statico .valueOf() della classe String grazie all’ overloading1 può ricevere differenti tipi di parametri :
static String | valueOf(boolean b) Returns the string representation of the boolean argument. |
static String | valueOf(char c) Returns the string representation of the char argument. |
static String | valueOf(char[] data) Returns the string representation of the char array argument. |
static String | valueOf(char[] data, int offset, int count) Returns the string representation of a specific subarray of the char array argument. |
static String | valueOf(double d) Returns the string representation of the double argument. |
static String | valueOf(float f) Returns the string representation of the float argument. |
static String | valueOf(int i) Returns the string representation of the int argument. |
static String | valueOf(long l) Returns the string representation of the long argument. |
static String | valueOf(Object obj) Returns the string representation of the Object argument. |
1 OVERLOADING: una tecnica di programmazione che ci consente di “sovraccaricare” un metodo di una classe con diverse varianti, in base ai parametri passati come riferimento. Dal punto di vista dell’utilizzo della classe ciò ci consente di definire in maniera dinamica il metodo che meglio si adatta alla nostra esigenza.