Estou tendo problemas em validar uma variável que recebe valor de um JOptionPane, nesta variável eu estou aplicando um teste para que o usuário não possa seguir adiante no programa caso digite um valor menor ou igual a 0. Mas o problema é que gostaria de fazer o mesmo processo caso ele digite uma letra. o teste que possuo é o seguinte:
//Aqui faz um teste para obrigar o usuário//a digitar um valor maior do que 0while(numero<=0){quant_copias=JOptionPane.showInputDialog("Digite a Quantidade de Cópias");numero=Integer.parseInt(quant_copias);}
No momento se o usuário digitar uma letra o programa retorna o seguinte erro que gostaria que fosse evitado:
ErroFor input string: “a”. Agradeço se alguém puder me ajudar.
cara vc trata isto com a excessao NumberFormatException
//Aqui faz um teste para obrigar o usuário/a digitar um valor maior do que 0
while (numero <= 0){
try{
quant_copias = JOptionPane.showInputDialog("Digite a Quantidade de Cópias");
numero = Integer.parseInt(quant_copias);
} catch(NumberFormatException nfex) {
System.out.println("Digite apenas numeros");
}
}
Abraços,
D
DouglasCarPJ
Show de bola renan_daniel e Felipe, valeu mesmo. Obrigado! :okok:
D
DouglasCarPJ
Pessoal estive testando a alteração que o renan_daniel e o Felipe sugeriram e funcionou bem quando insiro primeiramente um valor numérico negativo ou zero e depois a letra, mas gostaria que funcionasse também ao digitar primeiro a letra. Agradeço se alguém puder me ajudar.
R
renan_danielPJ
Se vc seguiu meu exemplo, vc tem que estar colocando o try fora do while, ou seja no momento da primeira leitura… entendeu?
Pq como ele está dentro do while, ele só pegar a excessao quando o valor for menor que zero…
ex:
try{
//Leitura do primeiro numero
//Aqui faz um teste para obrigar o usuário/a digitar um valor maior do que 0
while (numero <= 0){
quant_copias = JOptionPane.showInputDialog("Digite a Quantidade de Cópias");
numero = Integer.parseInt(quant_copias);
}
} catch(NumberFormatException nfex) {
System.out.println("Digite apenas numeros");
}
Flw…
D
DouglasCarPJ
Valeu renan_daniel fiz assim:
quant_copias=JOptionPane.showInputDialog("Digite a Quantidade de Cópias");try{numero=Integer.parseInt(quant_copias);//Leitura do primeiro numero //Aqui faz um teste para obrigar o usuário/a digitar um valor maior do que 0 while(numero<=0){quant_copias=JOptionPane.showInputDialog("Digite a Quantidade de Cópias");numero=Integer.parseInt(quant_copias);}}catch(NumberFormatExceptionnfex){System.out.println("Digite apenas numeros");}
Acontece que quando digito uma letra o programa retorna a mensagem “Digite apenas numeros”, mas deixa que o usuário siga adiante. Queria ver como fazer para enquanto o usuário não digitar um valor positivo e maior do que 0 o programa fique em um lastro pedindo para digitar o número de cópias até que o usuário digite este valor maior do que 0.
J
JavaNightPJ
“DouglasCar”:
Valeu renan_daniel fiz assim:
quant_copias=JOptionPane.showInputDialog("Digite a Quantidade de Cópias");try{numero=Integer.parseInt(quant_copias);//Leitura do primeiro numero //Aqui faz um teste para obrigar o usuário/a digitar um valor maior do que 0 while(numero<=0){quant_copias=JOptionPane.showInputDialog("Digite a Quantidade de Cópias");numero=Integer.parseInt(quant_copias);}}catch(NumberFormatExceptionnfex){System.out.println("Digite apenas numeros");}
Acontece que quando digito uma letra o programa retorna a mensagem “Digite apenas numeros”, mas deixa que o usuário siga adiante. Queria ver como fazer para enquanto o usuário não digitar um valor positivo e maior do que 0 o programa fique em um lastro pedindo para digitar o número de cópias até que o usuário digite este valor maior do que 0.
tenta fazer assim
numero=0;while(numero<=0){try{quant_copias=JOptionPane.showInputDialog("Digite a Quantidade de Cópias");numero=Integer.parseInt(quant_copias);}catch(NumberFormatExceptionnfex){System.out.println("Digite apenas numeros");}}// fim do while
R
renan_danielPJ
Cara, vc pode estar fazendo a leitura em um metodo e toda vez que disparar excessao chamar o metodo novamente, ou fazer um while mais externo...
while( i == 0 ) {
quant_copias = JOptionPane.showInputDialog( "Digite a Quantidade de Cópias" );
try{
numero = Integer.parseInt( quant_copias );
//Leitura do primeiro numero
//Aqui faz um teste para obrigar o usuário/a digitar um valor maior do que 0
while (numero <= 0){
quant_copias = JOptionPane.showInputDialog("Digite a Quantidade de Cópias");
numero = Integer.parseInt(quant_copias);
}
} catch(NumberFormatException nfex) {
//Na hora que chega aqui vc incrementa o i
i++;
}
i++; // se ele nao disparar a excessao incremento o i para nao ficar em laço eterno.
}//fecha o while externo
Tenta ae...
Flw... :wink:
V
vinciPJ
refatorando…
booleannaoDigitouCerto=true;Stringmensagem="Digite a Quantidade de Cópias(valor maior que zero)";while(naoDigitouCerto) {try{ quantidadeCopiasStr=JOptionPane.showInputDialog(mensagem); quantidadeCopias=Integer.parseInt(quantidadeCopiasStr);if(quantidadeCopias > 0) {naoDigitouCerto=false;}} catch(NumberFormatException nfex) { }}
D
DouglasCarPJ
Valeu pessoal pela força, utilizei a sugestão do JavaNight e funcionou. Obrigado a todos pelas dicas! :okok: