Premi Invio per continuare in Java

Rupam Yadav 12 ottobre 2023
Premi Invio per continuare in Java

Questo articolo ti mostrerà come mettere in attesa la console finché l’utente non preme Invio, quindi verrà visualizzato il messaggio successivo. Nell’esempio seguente, utilizzeremo la classe Scanner per prendere tre input e poi mostrarli sulla console.

Utilizzo di un nextLine() aggiuntivo per attendere il tasto Invio in Java

Nell’esempio creiamo un oggetto della classe Scanner, sc. Scanner esegue la scansione del testo e analizza i tipi primitivi come int e String. Questa classe include molti metodi utilizzati nelle operazioni di input. I metodi più comunemente usati sono nextInt() , nextLine, nextDouble e così via.

Nell’esempio seguente, vedremo dove si trova il problema e useremo una tecnica per risolverlo nel prossimo.

Qui prendiamo tre input: il tipo int, e i due successivi sono del tipo String. Usiamo la classe Scanner per chiamare prima il metodo nextInt() per ottenere l’input per l’età in una variabile di tipo int; quindi, per prendere input per il nome e il cognome, usiamo due metodi sc.nextLine() e due variabili per memorizzarli. Infine, mostriamo tutti i valori delle variabili nell’output.

Il problema si trova quando l’utente inserisce il valore per età e preme Invio. La console dovrebbe ricevere l’input per firstName, ma lo salta e va direttamente per lastName. L’output seguente mostra chiaramente il problema.

import java.util.Scanner;

public class EnterContinue {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter your age: ");
    int age = sc.nextInt();

    System.out.print("Enter your First Name: ");
    String firstName = sc.nextLine();

    System.out.print("Enter your last Name: ");
    String lastName = sc.nextLine();

    System.out.println("Your Info:\nAge: " + age + "\nFull Name: " + firstName + " " + lastName);
  }
}

Produzione:

Enter your age: 23
Enter your First Name: Enter your last Name: John
Your Info:
Age: 23
Full Name:  John

Process finished with exit code 0

Ora che conosciamo il problema, possiamo discutere la soluzione e perché il problema si verifica in primo luogo. Quando prendiamo un valore int come input, il metodo nextInt() legge il valore int e non può leggere la nuova riga. Questo è il motivo per cui quando premiamo Invio dopo aver letto int, la console lo vede come una nuova riga e lo salta alla seguente istruzione.

Dobbiamo usare un metodo nextLine() extra dopo la funzione nextInt() che salterà la nuova riga e mostrerà la riga successiva per affrontare questo problema. Nell’output, possiamo vedere che ora possiamo inserire il nome, cosa che non era possibile nell’esempio precedente.

import java.util.Scanner;

public class EnterContinue {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    System.out.print("Enter your age: ");
    int age = sc.nextInt();

    System.out.print("Enter your First Name: ");
    String firstName = sc.nextLine();
    sc.nextLine();

    System.out.print("Enter your last Name: ");
    String lastName = sc.nextLine();

    System.out.println("Your Info:\nAge: " + age + "\nFull Name: " + firstName + " " + lastName);
  }
}

Produzione:

Enter your age: 5
Enter your First Name: gfd
Enter your last Name: gfgf
Your Info:
Age: 5
Full Name:  gfgf
Autore: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn

Articolo correlato - Java Scanner