quero saber qual é a sintaxe correto da estrutura de repetição enquanto o atributo ‘idade’ ta sendo lido por um caractere incorretamente até que o input leia um integer dentro do catch(Exception e).
try {
System.out.print(“Quantos anos você tem " + this.nome +”? ");
this.idade = digite.nextInt();
} catch(Exception e){
System.out.println(“caracteres não é um tipo primitivo numérico.”);
System.out.print("Informe a sua idade corretamente: ");
this.idade = digite.nextInt();
while() { // erro de estrutura de repetição
System.out.print("por favor digite a sua idade correta: ");
this.idade = digite.nextInt();
}
}
Você deveria colocar os comandos de validação dentro do try, deixando o catch apenas para exceções, para que não exiba mensagem de erro sem um tratamento adequado para o usuário.
try {
boolean idadeInformada = false;
Scanner sc = new Scanner(System.In);
while ( ! idadenformada ) {
System.out.print(“Quantos anos você tem " + this.nome +”? ");
String idade = sc.nextLine();
// Testar se idade é numérica
// Senão imprimir a mensagem
System.out.println(“caracteres não é um tipo primitivo numérico.”);
System.out.print("Informe a sua idade corretamente: ");
// Se for numérica
this.idade = Integer.parseInt(idade);
idadeInformada = true;
sc.close();
}
} catch(Exception e){
}
}
Outra maneira seria:
boolean idadeInformada = false;
Scanner sc = new Scanner(System.In);
while ( ! idadeInformada ) {
try {
System.out.print(“Quantos anos você tem " + this.nome +”? ");
String idade = sc.nextLine();
this.idade = Integer.parseInt(idade);
idadeInformada = true;
sc.close();
} catch(NumberFormatException nfe) {
System.out.println(“caracteres não é um tipo primitivo numérico.”);
System.out.print("Informe a sua idade corretamente: ");
A partir da versão 7 do java, você pode sequenciar diferentes tipos de exceção para serem capturadas pelo mesmo bloco try/cath. É o chamado try multiple catch.
Ao invés de fazer isso: