Dúvida em validar uma variável

10 respostas
D

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 0
while (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.

10 Respostas

F

poe assim:

try{
 numero = Integer.parseInt(quant_copias);
}
catch (NumberFormatException erro){
 System.out.println("numero invalido");
}
R

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, :wink:

D

Show de bola renan_daniel e Felipe, valeu mesmo. Obrigado! :okok:

D

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

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… :grin:

D

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(NumberFormatException nfex) { 
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

“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(NumberFormatException nfex) { 
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(NumberFormatException nfex) { 
                 System.out.println("Digite apenas numeros"); 
                } 
   }  // fim do while
R

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

refatorando…

boolean naoDigitouCerto = true;
String mensagem = "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

Valeu pessoal pela força, utilizei a sugestão do JavaNight e funcionou. Obrigado a todos pelas dicas! :okok:

Criado 30 de setembro de 2004
Ultima resposta 1 de out. de 2004
Respostas 10
Participantes 5