Eu estou tentando fazer um programa onde um usuário precisa introduzir um número inteiro aleatório. Se o usuário insere uma String eu quero uma mensagem de erro pop fora: "Este não é um número" e depois reiniciar o programa até o usuário insere um número. Eu tenho esse até agora e eu estou preso. Acabei de receber uma mensagem de erro se a entrada I uma corda e programa trava.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int number = 0;
do {
System.out.println("Input a number!");
number = scanner.nextInt();
if (!scanner.hasNextInt()) {
System.err.println("This is not a number");
}
} while (!scanner.hasNextInt());
System.out.println("You entered: " + number);
}
Você está recebendo um InputMisMatchException porque se você amarrar uma entrada em um scanner.nextInt()
, ele vai imediatamente dar um erro e parar o programa antes que ele faz qualquer outra coisa, por isso não vai chegar ao seu if. Uma maneira de contornar este problema é em vez receber entrada do usuário como uma string, try
para analisá-lo para um int, e terminar o ciclo se não lançar uma exceção. Esta é a minha aplicação:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = "";
int number = 0;
boolean end = true;
do {
System.out.println("Input a number!");
input = scanner.nextLine();
try {
number = Integer.parseInt(input);
end = true;
} catch(Exception e) {
System.err.println("This is not a number");
end = false;
}
} while (!end);
System.out.println("You entered: " + number);
}