Estou tendo problemas para criar um Loop com um Try-Catch dentro

5 respostas
programaçãojava
G

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

}

}

5 Respostas

D

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.

G

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?

B

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?

F

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;		
		}		
	}
G

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…

Criado 10 de maio de 2018
Ultima resposta 22 de mai. de 2018
Respostas 5
Participantes 4