Try...catch estruture de repetição

4 respostas
Hudson_Monteiro

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();

}

}

4 Respostas

fventurajr

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: ");
}
   }
darlan_machado

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_machado

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:

try {
    //Do something
}catch (IOException ex) {
     logger.log(ex);
     throw ex;
catch (SQLException ex) {
     logger.log(ex);
     throw ex;
}

Você pode, simplesmente, fazer isso:

try {
     //Do something
} catch (IOException|SQLException ex) {
    logger.log(ex);
    throw ex;
}

Detalhes

Criado 22 de dezembro de 2019
Ultima resposta 23 de dez. de 2019
Respostas 4
Participantes 3