Logo Hardware.com.br
Ricardo Guimarães
Ricardo Guim... Veterano Registrado
1.3K Mensagens 5 Curtidas

(Java) Voltar a executar programa quando houver exceção

#1 Por Ricardo Guim... 17/03/2007 - 00:21
Sou iniciante em Java e quero saber como posso fazer para sempre repetir os procedimentos quando o usuário comete uma exceção. Por exemplo, fiz o código abaixo que mostra a tabuada do número digitado:

import java.io.*;
class Ex51
{
public static void main()
{
int x = 1;
long num;
System.out.println("Digite um numero para calcular sua tabuada."
try
{
BufferedReader numero;
numero = new BufferedReader(new InputStreamReader(System.in));
num = Long.parseLong (numero.readLine());
while (x<11)
{
System.out.println(num+"x"+x+"="+num*x);
x++;
}
}

catch (Exception e)
{
System.out.println("Isso nao esta certo. Tente novamente.&quot;

}
}
}
Como faço para voltar a pedir um número para calcular no caso de ele digitar letras ou um número decimal? Tentei só copiar um trecho do programa, mas sempre com erros de sintaxe, e acredito que haja algo mais eficiente e eficaz (correto).

Obrigado!
Tubiluki
Tubiluki Veterano Registrado
1.1K Mensagens 1 Curtida
#2 Por Tubiluki
17/03/2007 - 18:53
você pode fazer da seguinte forma:

import java.io.*;
class Ex51
{
public static void main()
{
int x = 1;
long num;
System.out.println("Digite um numero para calcular sua tabuada.&quot;
boolean ok = true;
do {
try {
ok = true;
BufferedReader numero;
numero = new BufferedReader(new InputStreamReader(System.in));
num = Long.parseLong (numero.readLine());
while (x<11)
{
System.out.println(num+"x"+x+"="+num*x);
x++;
}
}

catch (Exception e)
{
System.out.println("Isso nao esta certo. Tente novamente.&quot;
ok = false;

}

}while (!ok);

}
}


eu usei uma variavel boolean fazendo um loop na leitura... se ele nao conseguir ler o numero certo ele cai no catch e refaz o loop lendo o teclado novamente.

esse código pode ser melhorado por exemplo dentro do loop ter somente a parte da leitura com try catch...
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#4 Por jackinabox
20/03/2007 - 22:07
Essa é um exemplo realmente ruim do uso de exceptions:
O catch está capturando qualquer Exception que pode ocorrer em qualquer lugar do bloco try, e não acho que seja isso o que se deseja fazer. Na realidade, acho que não se deveria nem utilizar Exceptions para essa finalidade de validação de entrada de dados pelo usuário.
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
jackinabox
jackinabox Veterano Registrado
1.1K Mensagens 8 Curtidas
#6 Por jackinabox
22/03/2007 - 20:47
Ricardo Guimarães disse:
Jack, sou iniciante. Poderia falar como deveria ser feito em vez de apenas criticar o método?

Achei que eu não tinha "apenas criticado", já que fiz alguns comentários, embora superficiais.

Conforme já comentei, o catch está capturando qualquer Exception que venha a ocorrer dentro do bloco try. Creio que deveríamos capturar exceptions específicas.

Se o usuário digitar algo que não possa ser convertido para long, ocorrerá uma NumberFormatException. Então por quê não capturar essa exception específica, em vez de capturar qualquer exception indiscriminadamente?

Ah, pode ocorrer também uma IOException ao lermos System.in. Se isso ocorrer, será por alguma razão meio obscura, e provavelmente não há nada que possamos fazer para recuperar o programa. Então provavelmente não adianta ficar tentando novamente dentro do loop se esse tipo de exception ocorrer.
Jeferson Charles Mayer

"Como é que eu vou enxergar a tal floresta, com todas essas árvores atrapalhando a visão?"
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal