1. Lettura dalla console, System.in
Nelle lezioni precedenti abbiamo conosciuto i comandi di output a schermo. Per questo abbiamo usato l’oggetto System.out e i suoi metodi print() e println(). Semplice e comodo.
Ma, come probabilmente immagini, il solo output a schermo non è sufficiente. Lo scopo della maggior parte dei programmi è fare qualcosa di utile per l’utente. Perciò molto spesso è necessario che l’utente possa inserire dati da tastiera.
Come per l’output, anche per l’input esiste un oggetto speciale — System.in. Purtroppo, però, non è così comodo come vorremmo. Questo oggetto consente di leggere i dati da tastiera, ma solo un carattere alla volta.
Per questo utilizzeremo un’altra classe che, in combinazione con l’oggetto System.in, ci darà tutto ciò di cui abbiamo bisogno. In Java esistono da tempo classi per ogni evenienza. E ora conosceremo una di esse.
2. Classe Scanner
La classe Scanner (nome completo java.util.Scanner) sa leggere dati da diverse fonti: console, file, Internet. Se vogliamo che legga i dati da tastiera, dobbiamo passargli l’oggetto System.in come parametro, ovvero come sorgente dei dati. Poi l’oggetto di tipo Scanner saprà da solo cosa farne.
La lettura da tastiera tramite un oggetto di tipo Scanner apparirà all’incirca così:
| Codice | Spiegazione |
|---|---|
|
Creiamo un oggetto della classe Scanner. Leggiamo da tastiera una riga di testo. Leggiamo da tastiera un numero. |
Sembra semplice, ma è davvero tutto così facile?
Immagino che ti siano venute in mente molte domande, e ora risponderemo.
Ma prima mostriamo un esempio di programma completo che utilizza la classe Scanner:
void main()
{
Scanner console = new Scanner(System.in);
String name = console.nextLine();
int age = console.nextInt();
System.out.println("Name: " + name);
System.out.println("Age: " + age);
}
3. Creazione di un oggetto Scanner
Prima domanda — che cos’è questa riga Scanner console = new Scanner(System.in);?
Una riga del genere può confondere, tuttavia incontrerai spesso cose simili. Quindi, credo sia ora di spiegare che cosa c’è scritto qui.
Ricordiamo come di solito creiamo una variabile con del testo:
String str = "testo";
Per prima cosa scriviamo il tipo della variabile (String), poi il suo nome (str) e, infine, dopo il segno di uguale scriviamo il valore.
Nella nostra strana riga, in realtà, è la stessa cosa:
Scanner console = new Scanner(System.in);
Tutto ciò che si trova a sinistra del segno di uguale è la dichiarazione di una variabile di tipo Scanner di nome console. Si sarebbe potuta chiamare, ad esempio, s oppure scanner, o anche keyboard. In tal caso il codice apparirebbe così:
Scanner s = new Scanner(System.in);
String name = s.nextLine();
int age = s.nextInt();
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
int age = scanner.nextInt();
Scanner keyboard = new Scanner(System.in);
String name = keyboard.nextLine();
int age = keyboard.nextInt();
Penso che ora sia tutto molto più chiaro.
Il codice che si trova a destra del segno di uguale è un po’ più complesso. Intendo new Scanner(System.in); Ma anche qui non c’è nulla di trascendentale.
In questo codice diciamo alla macchina Java: crea un nuovo oggetto (parola new) di tipo Scanner e passagli come parametro la fonte da cui il nuovo oggetto Scanner leggerà i dati — l’oggetto System.in.
Dopo l’esecuzione di questa riga avremo una variabile di nome console di tipo Scanner, con l’aiuto della quale il nostro programma potrà leggere i dati da tastiera.
4. Chiamata dei metodi
Nell’esempio precedente la nostra variabile console di tipo Scanner conteneva al suo interno un riferimento a un oggetto di tipo Scanner.
Per chiamare i metodi dell’oggetto a cui la variabile fa riferimento, dopo il nome della variabile bisogna scrivere un punto, quindi il nome del metodo e i parametri. La forma generale di questo comando è:
peremennaya.metod(parametry);
Esempi:
System.out.println("Ciao");
System.out.println(1);
Se non prevedi di passare parametri alla funzione, è necessario scrivere semplicemente le parentesi vuote:
peremennaya.metod();
Esempio:
System.out.println();
5. Input dei dati dalla console
Inserire dati da tastiera, quando abbiamo un oggetto di tipo Scanner, è molto semplice.
Per leggere da tastiera una stringa, serve il comando:
String str = console.nextLine();
Quando il programma arriverà all’esecuzione di questa riga, si sospenderà e attenderà che l’utente inserisca i dati e prema il tasto Enter. Dopodiché tutto ciò che l’utente ha inserito verrà salvato nella variabile str.
Per leggere da tastiera un numero intero, serve il comando:
int number = console.nextInt();
Qui tutto è analogo al comando precedente. Quando il programma arriverà all’esecuzione di questa riga, si sospenderà e attenderà che l’utente inserisca i dati e prema il tasto Enter. Dopodiché tutto ciò che l’utente ha inserito verrà convertito in un numero e salvato nella variabile number.
Se l’utente inserisce dati che non possono essere convertiti in un numero intero, si verificherà un errore nel programma e questo terminerà.
Per leggere da tastiera un numero decimale, serve il comando:
double number = console.nextDouble();
Questo comando è del tutto analogo al comando nextInt(), solo che verifica che i dati inseriti possano essere convertiti in un numero di tipo double.
Esempio di programma che legge da tastiera due numeri e ne stampa la somma:
void main()
{
Scanner console = new Scanner(System.in);
int a = console.nextInt();
int b = console.nextInt();
System.out.println(a + b);
}
Nota
L’utente può inserire più numeri in un’unica riga, separandoli con spazi: una tale situazione verrà gestita correttamente dai metodi della classe Scanner. Tuttavia, i numeri verranno letti dal programma solo dopo che l’utente avrà premuto Enter.
GO TO FULL VERSION