Quando si programma in Java o in qualsiasi altro linguaggio, molto probabilmente sarà necessario utilizzare le informazioni di input di un utente. Java fornisce molti metodi diversi per ottenere informazioni sull'utente, ma il metodo più comune e forse più semplice da implementare è utilizzare l'oggetto Scanner.
Passi
Metodo 1 di 2: Video
Passaggio 1. Importa la classe Scanner
Puoi scegliere di importare il
java.util. Scanner
classe o l'intero
java.util
pacchetto. Per importare una classe o un pacchetto, aggiungi una delle seguenti righe all'inizio del codice:
import java.util. Scanner; // Questo importerà solo la classe Scanner. import java.util.*; // Questo importerà l'intero pacchetto java.util.
Passaggio 2. Inizializzare un nuovo oggetto Scanner passando il tasto
Sistema.in
flusso di input al costruttore.
Sistema.in
è il flusso di input standard che è già aperto e pronto per fornire dati di input. In genere questo flusso corrisponde all'input da tastiera.
Scanner userInputScanner = new Scanner(System.in);
Passaggio 3. Leggere i diversi tipi di dati di input inseriti dall'utente
La classe Scanner supporta l'acquisizione di primitive come int, byte, short, long oltre a ottenere stringhe.
-
Ecco alcuni metodi disponibili tramite la classe Scanner:
-
Leggi un byte -
byte successivo()
-
Leggi un breve -
successivoShort()
-
Leggi un int -
nextInt()
-
Leggi a lungo -
nextLong()
-
Leggi un galleggiante -
nextFloat()
-
Leggi un doppio -
successivoDouble()
-
Leggi un booleano -
nextBoolean()
-
Leggi una riga completa -
nextLine()
-
Leggi una parola -
prossimo()
-
-
Ecco un esempio di un programma che utilizza diversi metodi della classe Scanner per ottenere diversi tipi di input:
import java.util. Scanner; public class ScannerExample { public static void main(String args) { // Avvia un nuovo Scanner Scanner userInputScanner = new Scanner(System.in); // Test nextLine(); System.out.println("\nCome ti chiami? "); Nome stringa = userInputScanner.nextLine(); // Verifica nextInt(); System.out.print("Quanti gatti hai? "); int numeroOfCats = userInputScanner.nextInt(); // Test nextDouble(); System.out.print("Quanti soldi ci sono nel tuo portafoglio? $"); double moneyInWallet = userInputScanner.nextDouble(); System.out.println("\nHello " + name + "! Hai " + numberOfCats + (numberOfCats > 1 ? " cats": " cat") + " e $" + moneyInWallet + " nel tuo portafoglio.\n"); } }
Metodo 2 di 2: gestione delle eccezioni
Passaggio 1. Gestire le eccezioni di input
Un
InputMismatchException
viene generato quando l'utente immette dati che non corrispondono al tipo richiesto. Ad esempio, se l'utente immette una stringa quando viene richiesto un int, il programma genererà an
InputMismatchException
ed esci. Esistono diversi modi per gestire questa eccezione e risolvere questo problema in modo che il tuo programma possa essere infallibile.
Passaggio 2. Utilizzare un blocco try-catch per gestire il
InputMismatchException
.
import java.util. InputMismatchException; import java.util. Scanner; public class ScannerExample { public static void main(String args) { // Avvia un nuovo Scanner Scanner userInputScanner = new Scanner(System.in); // Test nextLine(); System.out.print("\nCome ti chiami? "); Nome stringa = userInputScanner.nextLine(); // Test nextInt(); booleano validInput = false; int numeroDiGatti = 0; while (!validInput) { System.out.print("Quanti gatti hai? "); prova { numberOfCats = userInputScanner.nextInt(); validInput = vero; } catch (InputMismatchException e) { validInput = false; userInputScanner.nextLine(); } } // Verifica nextDouble(); validInput = falso; double moneyInWallet = 0.0; while (!validInput) { System.out.print("Quanti soldi ci sono nel tuo portafoglio? $"); prova { moneyInWallet = userInputScanner.nextDouble(); userInputScanner.nextLine(); validInput = vero; } catch (InputMismatchException e) { validInput = false; userInputScanner.nextLine(); } } System.out.println("\nHello " + name + "! Hai " + numberOfCats + (numberOfCats > 1 ? " cats": "cat") + " e $" + moneyInWallet + " nel tuo portafoglio.\ n"); } }
Nota che dobbiamo importare
java.util. InputMismatchException
per utilizzare il
InputMismatchException
Aggiunta
userInputScanner.nextLine();
Passaggio 3. In alternativa, rendere infallibile l'input dell'utente prendendo solo le righe successive dallo scanner
In questo modo, possiamo assicurarci che tutto ciò che lo Scanner restituisce sia un oggetto String e non creerà alcuna eccezione. Quindi, per convertire le stringhe in interi o doppi, possiamo usare le classi Integer e Double wrapper.
import java.util. Scanner; public class ScannerExample { public static void main(String args) { // Avvia un nuovo Scanner Scanner userInputScanner = new Scanner(System.in); // Test nextLine(); System.out.print("\nCome ti chiami? "); Nome stringa = userInputScanner.nextLine(); // Test nextInt(); booleano validInput = false; int numeroDiGatti = 0; while (!validInput) { System.out.print("Quanti gatti hai? "); Stringa input = userInputScanner.nextLine(); prova { numberOfCats = Integer.parseInt(input); validInput = vero; } catch (NumberFormatException e) { validInput = false; } } // Verifica nextDouble(); validInput = falso; double moneyInWallet = 0.0; while (!validInput) { System.out.print("Quanti soldi ci sono nel tuo portafoglio? $"); Stringa input = userInputScanner.nextLine(); prova { moneyInWallet = Double.parseDouble(input); validInput = vero; } catch (NumberFormatException e) { validInput = false; } } System.out.println("\nHello " + name + "! Hai " + numberOfCats + (numberOfCats > 1 ? " cats": "cat") + " e $" + moneyInWallet + " nel tuo portafoglio.\ n"); } }
Nota che qui non abbiamo dovuto importare il
NumberFormatException
Inoltre, non abbiamo dovuto cancellare il buffer usando
userInputScanner.nextLine();
Suggerimenti
- Consulta l'API Scanner per ulteriori informazioni sull'utilizzo della classe Scanner.
- Usa sempre.next() invece di.nextLine() per leggere la parola successiva, poiché.nextLine() può essere bacato.