publicclassExcecao{publicstaticvoidmain(String[]args){Scannerteclado=newScanner(System.in);System.out.println("sistema que calcula a divisão de 2 números.\n");try{System.out.println("informe o primeiro valor: ");inta=teclado.nextInt();System.out.println("informe o segundo valor: ");intb=teclado.nextInt();doublec=a/b;System.out.println("o resultado da divisão é: "+c);}catch(InputMismatchExceptione){System.out.println("número inválido, digite um número inteiro.");}catch(ArithmeticExceptione2){System.out.println("não é possível dividir por 0");}}
}
como faço para que mesmo depois da mensagem o usuário continuar digitando um número até não aparecer mais o aviso de erro?
A única maneira de fazer isso é incluir o bloco todo dentro de um laço de repetição (for/while/do-while).
Porém, essa não é uma boa prática, seria mais interessante fazer o contrário: incluir o laço dentro do bloco try. Como isso resultaria no mesmo comportamento (digitar um valor > lançar exceção > capturar e tratar > apresentar erro > finalizar a execução), não é o que você quer fazer.
X
Xablau1 like
e qual seria a condição de parada desse suposto bloco while?
darlan_machado2 likes
Qual a razão pela qual você quer que esse trecho de código se repita mesmo?
lvbarbosa1 like
Tenta aí:
importjava.util.*;classProgram{privatestaticintpromptInt(Stringprompt){System.out.printf("%s: ",prompt);returnnewScanner(System.in).nextInt();}publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);inta,b;while(true){try{a=promptInt("A");b=promptInt("B");break;}catch(NoSuchElementExceptionex){System.out.println("Numero invalido, tente novamente.");}catch(IllegalStateExceptionex){System.out.println("Erro em STDIN.");System.exit(1);}}System.out.printf("%d, %d%n",a,b);}}
Alternativa (com o loop por variável que vc quiser ler):
importjava.util.*;classProgram{privatestaticintpromptInt(Stringprompt){while(true){try{System.out.printf("%s: ",prompt);returnnewScanner(System.in).nextInt();}catch(NoSuchElementExceptionex){System.out.println("Numero invalido, tente novamente.");}catch(IllegalStateExceptionex){System.out.println("Erro em STDIN.");System.exit(1);}}}publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);inta,b;a=promptInt("A");b=promptInt("B");System.out.printf("%d, %d%n",a,b);}}
X
Xablau
o exercicio pede que o usuário digite várias vezes até a mensagem de erro desaparecer
darlan_machado
Cara, vou colocar um exemplo bem tosco:
intx=10,numero;do{try{System.out.println("Adivinhe o número");numero=Integer.parseInt(scanner.nextLine());if(numero!=x){thrownewException("Você errou!");}}catch(Exceptionex){ex.printStackTrace();}}while(numero!=x);System.out.println("Você acertou!");
Solucao aceita
DeniseDAC3 likes
Cara, o seguinte, você usa while(true){}, envolvendo todo o try-catch
e após a linha impressão do resultado (se chegou nessa linha quer dizer que ocorreu tudo certo e a mensagem de erro não foi mais exibida) você simplesmente coloca um break;
Vai na fé que dá certo, rsrs
X
Xablau1 like
eu tava tentando de um jeito mas tava dando um bug, tentei do seu e realmente funcionou. muito obrigado!!