Scanner (nextLine())

Pessoal,

Não consigo entender o motivo do console não responder ao comando nextLine. Simplesmente ao executar a linha nada acontece. O prompt fica parado e mesmo que eu digite algo, nada aparece. O algoritmo até compila mas chega nessa linha nada que eu digito, aparece. Podem me ajudar por favor?

import java.util.Scanner;

public class C0609Exercicio05 {

public static void main (String[] args) {

  Scanner scan = new Scanner(System.in);
  
  int num;
  String resposta;
  
  System.out.print("Informe um número inteiro: ");
  num = scan.nextInt();
  
  System.out.print("O número é maior que zero: ");
  resposta = scan.nextLine();

}
}

Quando você chama o nextInt() e pressiona ENTER, o Scanner lê o número inteiro, mas não consome o caractere '\n' que vem após ele.

Quem consome o '\n' é o nextLine(), por isso quando você digita um texto após o nextInt() e pressiona ENTER e em seguida chama o nextLine(), você recebe uma String vazia pois o nextLine() vai primeiro consumir aquele '\n' que ficou “pendurado” após o nextInt().

Para programas em linha de comando, como este seu exercício, eu recomendo não utilizar o nextInt(), ao invés disso, utilize somente o nextLine().

Veja:

import java.util.Scanner;

public class C0609Exercicio05 {

    public static void main (String[] args) {
        try {
            Scanner scanner = new Scanner(System.in);

            System.out.print("Informe um número inteiro: ");
            int num = Integer.parseInt(scanner.nextLine());

            System.out.print("O número é maior que zero: ");
            String resposta = scanner.nextLine();
        } catch (Throwable t) {
            t.printStackTrace();
        } finally {
            System.exit(0);
        }
    }
}
2 curtidas