Input da tastiera
Leggere quello che scrive l’utente
Sezione intitolata “Leggere quello che scrive l’utente”L’input e cio che entra nel programma. Nei primi esempi leggeremo dati dalla tastiera.
Per farlo useremo Scanner, una classe della libreria standard di Java.
Prima di usarla, devi importarla:
import java.util.Scanner;Un primo esempio
Sezione intitolata “Un primo esempio”import java.util.Scanner;
public class Saluto { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.print("Come ti chiami? "); String nome = scanner.nextLine();
System.out.println("Ciao, " + nome + "!"); }}Esempio di esecuzione:
Come ti chiami? LucaCiao, Luca!System.in rappresenta l’input che arriva dal terminale.
nextLine() legge una riga intera di testo.
Leggere un numero intero
Sezione intitolata “Leggere un numero intero”Per leggere un int, usa nextInt():
import java.util.Scanner;
public class Eta { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.print("Quanti anni hai? "); int eta = scanner.nextInt();
System.out.println("Tra un anno avrai " + (eta + 1) + " anni."); }}Esempio:
Quanti anni hai? 20Tra un anno avrai 21 anni.Leggere un numero decimale
Sezione intitolata “Leggere un numero decimale”Per un numero con decimali, usa nextDouble():
import java.util.Scanner;
public class Prezzo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.print("Prezzo: "); double prezzo = scanner.nextDouble();
System.out.println("Doppio prezzo: " + (prezzo * 2)); }}Nota: in molti ambienti Java si aspetta il punto per i decimali, per esempio
12.50, non12,50.
Il piccolo problema dopo nextInt
Sezione intitolata “Il piccolo problema dopo nextInt”Un errore comune nasce quando usi nextInt() e subito dopo nextLine().
import java.util.Scanner;
public class Profilo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.print("Eta: "); int eta = scanner.nextInt();
System.out.print("Nome: "); String nome = scanner.nextLine();
System.out.println(nome + ", " + eta); }}Il programma potrebbe saltare la richiesta del nome. Succede perche nextInt() legge il numero, ma lascia nel buffer il carattere di a capo.
Una soluzione semplice e consumare quella riga prima di leggere il nome:
System.out.print("Eta: ");int eta = scanner.nextInt();scanner.nextLine(); // consuma l'a capo rimasto
System.out.print("Nome: ");String nome = scanner.nextLine();Chiudere lo Scanner
Sezione intitolata “Chiudere lo Scanner”Negli esempi piccoli spesso vedrai:
scanner.close();Chiudere lo scanner libera la risorsa usata per leggere.
In programmi brevi da terminale puoi metterlo alla fine:
Scanner scanner = new Scanner(System.in);
// letture...
scanner.close();Esempio completo
Sezione intitolata “Esempio completo”import java.util.Scanner;
public class Ordine { public static void main(String[] args) { Scanner scanner = new Scanner(System.in);
System.out.print("Prodotto: "); String prodotto = scanner.nextLine();
System.out.print("Quantita: "); int quantita = scanner.nextInt();
System.out.print("Prezzo: "); double prezzo = scanner.nextDouble();
double totale = quantita * prezzo; System.out.println("Totale per " + prodotto + ": " + totale + " euro");
scanner.close(); }}L’input rende il programma meno fisso: invece di usare sempre gli stessi valori, puoi farli scegliere all’utente.