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(“Quantosanosvocêtem"+this.nome+”?");this.idade=digite.nextInt();}catch(Exceptione){System.out.println(“caracteresnãoéumtipoprimitivonumérico.”);System.out.print("Informeasuaidadecorretamente:");this.idade = digite.nextInt();while() { // erro de estrutura de repetiçãoSystem.out.print("porfavordigiteasuaidadecorreta:");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{booleanidadeInformada=false;Scannersc=newScanner(System.In);while(!idadenformada){System.out.print(“Quantosanosvocêtem" + this.nome +”? ");Stringidade=sc.nextLine();// Testar se idade é numérica// Senão imprimir a mensagemSystem.out.println(“caracteresnãoéumtipoprimitivonumérico.”);System.out.print("Informe a sua idade corretamente: ");// Se for numéricathis.idade=Integer.parseInt(idade);idadeInformada=true;sc.close();}}catch(Exceptione){}}
Outramaneiraseria:booleanidadeInformada=false;Scannersc=newScanner(System.In);while(!idadeInformada){try{System.out.print(“Quantosanosvocêtem" + this.nome +”? ");Stringidade=sc.nextLine();this.idade=Integer.parseInt(idade);idadeInformada=true;sc.close();}catch(NumberFormatExceptionnfe){System.out.println(“caracteresnãoéumtipoprimitivonumérico.”);System.out.print("Informe a sua idade corretamente: ");
}}
darlan_machado2 likes
As boas práticas de programação dizem para evitar o try/catch dentro de estruturas de repetição. Causam lentidão.
Hudson_Monteiro
muito obrigado pela ajuda!
darlan_machado1 like
Apenas para acrescentar…
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: