Java in attesa di input
L’input dell’utente può fare riferimento a qualsiasi informazione o dato che un utente desidera che il compilatore elabori. Potremmo incontrare situazioni in cui vogliamo che il nostro programma metta in pausa la compilazione e attenda che l’utente inserisca un valore.
Per tali situazioni, possiamo usare la funzione nextLine()
.
In questo tutorial impareremo come fare in modo che Java attenda l’input dell’utente utilizzando il metodo nextLine()
.
La funzione nextLine()
si trova nella classe java.util.Scanner
in Java. Questa funzione viene utilizzata per spostarsi oltre la riga corrente e restituire un input.
Quindi, utilizzando questo metodo, il compilatore attende che l’utente immetta una stringa valida e riprenda la compilazione del programma. Questo metodo è applicabile solo al tipo di dati stringa.
Per esempio,
// Java program to illustrate the
// nextLine() method of Scanner class in Java
import java.util.Scanner;
public class Scanner_Class {
public static void main(String[] args) {
// create a new scanner
// with the specified String Object
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
// print the next line
System.out.println("The line entered by the user: " + s);
scanner.close();
}
}
Ingresso:
Hello World.
Produzione:
The line entered by the user: Hello World.
Non è necessario attendere per verificare la disponibilità dell’input poiché Scanner.nextLine()
si bloccherà automaticamente fino a quando non sarà disponibile una linea.
Il codice seguente lo spiega.
import java.util.Scanner;
public class Scanner_Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
try {
while (true) {
System.out.println("Please input a line");
long then = System.currentTimeMillis();
String line = scanner.nextLine();
long now = System.currentTimeMillis();
System.out.printf("Waited %.3fs for user input%n", (now - then) / 1000d);
System.out.printf("User input was: %s%n", line);
}
} catch (IllegalStateException | NoSuchElementException e) {
// System.in has been closed
System.out.println("System.in was closed; exiting");
}
}
}
Produzione:
Please input a line
Hello World.
Waited 1.892s for user input
User input was: Hello World.
Please input a line
^D
System.in was closed; exiting
Nell’esempio sopra, abbiamo calcolato e mostrato il tempo in cui il compilatore ha atteso l’input utilizzando la funzione currentTimeMillis()
.
Questa funzione può restituire due eccezioni. L’IllegalStateException
viene sollevata quando Scanner viene chiuso e la NoSuchElementException
viene sollevata quando non viene trovata alcuna riga.