No código abaixo eu estou tentando fazer com que enquanto o usuário não colocar um número, repetir a acão dentro do While, mas pelo visto, acabou gerando um Loop Infinito e eu não estou conseguindo contornar isso…
[ Código ]
//Início
import java.util.InputMismatchException;
import java.util.Scanner;
public class RefactorException {
public static void main(String[] args) {
Scanner teclado = new Scanner(System.in);
boolean flag = false;
try {
System.out.println("Eu sei dividir!");
System.out.println("Informe o primeiro valor: ");
int x = teclado.nextInt();
System.out.println("Informe o segundo valor: ");
int y = teclado.nextInt();
double z = ( x/y );
System.out.println("O resultado da soma é " + z);
}
catch (ArithmeticException erroDivisãoPorZero) {
System.out.println("Erro: divisão por zero!");
}
catch(NumberFormatException erro){
System.out.println("Insira apenas números." + "\nErro!");
}
catch (InputMismatchException erroString){
System.out.println("Operação inválida!"
+ "\nDivisão por caractere inválido.");
}
while(!flag) {
try {
System.out.println("Eu sei dividir!");
System.out.println("Informe o primeiro valor: ");
int x = teclado.nextInt();
System.out.println("Informe o segundo valor: ");
int y = teclado.nextInt();
double z = ( x/y );
System.out.println("O resultado da soma é " + z);
flag = true;
}
catch(InputMismatchException erro) {
flag = false;
System.out.println("\n---------Erro!---------"
+ "\n---Insira um número!---");
}
}
}
}
Se você quer lançar uma exceção, precisa definir em que momento isso ocorrerá. Em geral, você valida o campo que deseja e lança a exceção.
Mas tá dando um loop, eu lancei, e roda e tal, mas tá infinito, e eu preciso que, fique infinito, até o usuário colocar uma entrada de dados válida… Tendeu agora?
Faz o seguinte…
primeiro troca o !flag por flag == false…as vezes funciona… se não funcionar
coloca o valor nos dois, como se estivesse de acordo.
Coloca um breakpoint pra debugar na linha do while.
O que vem no flag? sabe fazer isso?
Nessa parte do código aqui
while(!flag) {
try {
System.out.println("Eu sei dividir!");
System.out.println("Informe o primeiro valor: ");
int x = teclado.nextInt();
System.out.println("Informe o segundo valor: ");
int y = teclado.nextInt();
double z = ( x/y );
System.out.println("O resultado da soma é " + z);
flag = true;
}
catch(InputMismatchException erro) {
flag = false;
System.out.println("\n---------Erro!---------"
+ "\n---Insira um número!---");
}
}
Se eu fosse você, iria do mais básico possível, pois da para vê que é algo para aprender.
não precisa colocar um try catch ai.
//tira o !
while(flag) {
System.out.println("Eu sei dividir!");
System.out.println("Informe o primeiro valor: ");
int x = teclado.nextInt();
System.out.println("Informe o segundo valor: ");
int y = teclado.nextInt();
double z = ( x/y );
System.out.println("O resultado da soma é " + z);
//pergunte se quer continuar
System.out.println(""Deseja continuar s apra sim e n para não");
String opcao = in.NextLine();
//verifique se quer continuar
if(!opcao.equals("s"))
flag = false;
}
}
Então, é… Essa parte é um pedaço de uma questão de exercício mas é sobre “Try-Catch”, aí por isso o uso dele, por que a gente tava tentando capturar as possíveis exceções que poderiam ocorrer sobre um programa de cálculo ou qualquer outra coisa envolvida com entrada de dados…