Caixa de entrada ler apenas numeros [RESOLVIDO]

23 respostas
B

Bom dia galera, estou com um prob, no meu algoritimo tem uma caixa de dialogo no tem a opção de escolha 1 ou 2,
se 1, faça tal coisa, se 2 faça outra coisa, se diferente de 1 e 2 , mostre msg de erro, bom até aí tudo bem ta rodando certinho,
soh que quando digito alguma letra o prog fexa e nao mostra a msg de erro, aí ta o prob, ele tem q mostrar essa msg tbm,
ja q é diferente de 1 e 2, mas nao estou conseguindo fazer isso, Agradeço desde ja.

public static void main(String[] args) {
        
        String eleventhNumber, twelfthNumber, thirteenthNumber, input;
        double quantidadecalor, trabalho, VariacaoEnergia, click;        
        
         input = JOptionPane.showInputDialog ("Digite 1 se a variação de energia interna não for 0"
                 + "\n Digite 2 se a variação de enregia interna for 0 ");
        
         click = 
                 Double.parseDouble(input);
         if (click != 1 && click != 2 ){
             JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);}

23 Respostas

drsmachado

Quando você tenta fazer isso

click =   
                Double.parseDouble(input);

e o valor inserido foi uma letra, ele irá lançar uma exception. Isso está interrompendo teu programa, pois não há tratamento adequado para a questão.
Logo, você deve, primeiro, validar se é número ou não, adicionando um try/catch e tratando a exceção, caso não seja número.

nel

drsmachado:
Quando você tenta fazer isso

click =   
                Double.parseDouble(input);

e o valor inserido foi uma letra, ele irá lançar uma exception. Isso está interrompendo teu programa, pois não há tratamento adequado para a questão.
Logo, você deve, primeiro, validar se é número ou não, adicionando um try/catch e tratando a exceção, caso não seja número.

Ou simplesmente:

if (!input.trim().matches("\\d+")) { System.out.println("Digite somente números"); return; } else { click = Double.parseDouble (input.trim()); }

drsmachado

nel:
drsmachado:
Quando você tenta fazer isso

click =   
                Double.parseDouble(input);

e o valor inserido foi uma letra, ele irá lançar uma exception. Isso está interrompendo teu programa, pois não há tratamento adequado para a questão.
Logo, você deve, primeiro, validar se é número ou não, adicionando um try/catch e tratando a exceção, caso não seja número.

Ou simplesmente:

if (!input.trim().matches("\\d+")) { System.out.println("Digite somente números"); return; } else { click = Double.parseDouble (input.trim()); }


Regex não é meu forte.
Enfim, é uma solução válida e simples.

nel

drsmachado:
nel:
drsmachado:
Quando você tenta fazer isso

click =   
                Double.parseDouble(input);

e o valor inserido foi uma letra, ele irá lançar uma exception. Isso está interrompendo teu programa, pois não há tratamento adequado para a questão.
Logo, você deve, primeiro, validar se é número ou não, adicionando um try/catch e tratando a exceção, caso não seja número.

Ou simplesmente:

if (!input.trim().matches("\\d+")) { System.out.println("Digite somente números"); return; } else { click = Double.parseDouble (input.trim()); }


Regex não é meu forte.
Enfim, é uma solução válida e simples.

Sem dúvidas. Não chegou nem a ser uma critica, por isso usei o OU, apenas quis mostrar outra solução ao colega.
Abraços machado.

B
public static void main(String[] args) {
        
        String eleventhNumber, twelfthNumber, thirteenthNumber, input, result;
        double quantidadecalor, trabalho, VariacaoEnergia, click;        
        
         input = JOptionPane.showInputDialog ("Digite 1 se a variação de energia interna não for 0"
                 + "\n Digite 2 se a variação de enregia interna for 0 ");
        
         if (!input.trim().matches("\\d+")) {   JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);
  
  return;  
} else {  
  click = Double.parseDouble (input.trim());  
}    
        if (click != 1 && click != 2 ){
             JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);
     
             
              
        
        }

fiz assim e rodou direitinnho, brigadão aew galera, são feras (Y)

drsmachado
bixigas:
public static void main(String[] args) {
        
        String eleventhNumber, twelfthNumber, thirteenthNumber, input, result;
        double quantidadecalor, trabalho, VariacaoEnergia, click;        
        
         input = JOptionPane.showInputDialog ("Digite 1 se a variação de energia interna não for 0"
                 + "\n Digite 2 se a variação de enregia interna for 0 ");
        
         if (!input.trim().matches("\\d+")) {   JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);
  
  return;  
} else {  
  click = Double.parseDouble (input.trim());  
}    
        if (click != 1 && click != 2 ){
             JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);
     
             
              
        
        }

fiz assim e rodou direitinnho, brigadão aew galera, são feras (Y)


Só identa corretamente teu código, que assim fica parecendo meu quarto, de tão bagunçado.
Se está usando o Eclipse, pressiona CTRL + SHIFT + F que arruma tudo certinho (ou quase).
Se é netbeans, SHIFT + ALT + F.
Nel, tranquilo, mesmo se fosse crítica, seria benvinda, afinal, nós estamos sempre aprendendo.

B

tentei colocar um laço, se a entrada for em numeros ele mostra a msg e volta pra caixa d dialogo,
se for letras mostra a msg mas nao volta.

String eleventhNumber, twelfthNumber, thirteenthNumber, input;
        double quantidadecalor, trabalho, VariacaoEnergia, click;

        do {
            input = JOptionPane.showInputDialog("Digite 1 se a variação de energia interna não for 0"
                    + "\n Digite 2 se a variação de enregia interna for 0 ");

            if (!input.trim().matches("\\d+")) {
                JOptionPane.showMessageDialog(
                        null, "Error! Digite 1 ou 2", "ERROR !",
                        JOptionPane.ERROR_MESSAGE);

                return;
            } else {
                click = Double.parseDouble(input.trim());

                if (click != 1 && click != 2) {
                    JOptionPane.showMessageDialog(
                            null, "Error! Digite 1 ou 2", "ERROR !",
                            JOptionPane.ERROR_MESSAGE);
                }
            }

        } while (click != 1 || click != 2);
        {
        }
nel

Troca o || por &&.

B

nao deu certo , tentei isso tbm , mas deu errado

while (click != 1 && click != 2 && (!input.trim().matches("\\d+")));

nel

Calma. Qual a condição para que permaneça sempre em loop ?
E poste seu código completo.

Abraços.

B

nel:
Calma. Qual a condição para que permaneça sempre em loop ?
E poste seu código completo.

Abraços.

import javax.swing.JOptionPane;


public class Teste {

  
    public static void main(String[] args) {

        String eleventhNumber, twelfthNumber, thirteenthNumber, input;
        double quantidadecalor, trabalho, VariacaoEnergia, click;

        do {
        input = JOptionPane.showInputDialog("Digite 1 se a variação de energia interna não for 0"
                + "\n Digite 2 se a variação de enregia interna for 0 ");

        if (!input.trim().matches("\\d+")) {
            JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);

            return;
        } else {
            click = Double.parseDouble(input.trim());
        }
        if (click != 1 && click != 2) {
            JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);}}
        while (click != 1 && click != 2 && (!input.trim().matches("\\d+")));
F

Não sei se essa é a melho opção, mas não to inspirado hj ^^
Também troquei a regex, senão vc podia colocar qualquer número.

String input = JOptionPane.showInputDialog("Digite 1 se a variação de energia interna não for 0"
                + "\n Digite 2 se a variação de enregia interna for 0 ");

         while (!input.trim().matches("[1-2]")) {
            JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);

            input = JOptionPane.showInputDialog("Digite 1 se a variação de energia interna não for 0"
                    + "\n Digite 2 se a variação de enregia interna for 0 ");            

        }

        double click = Double.parseDouble(input);
        //  faz o resto
B
felipeaps:
Não sei se essa é a melho opção, mas não to inspirado hj ^^ Também troquei a regex, senão vc podia colocar qualquer número.
String input = JOptionPane.showInputDialog("Digite 1 se a variação de energia interna não for 0"
                + "\n Digite 2 se a variação de enregia interna for 0 ");

         while (!input.trim().matches("[1-2]")) {
            JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);

            input = JOptionPane.showInputDialog("Digite 1 se a variação de energia interna não for 0"
                    + "\n Digite 2 se a variação de enregia interna for 0 ");            

        }

        double click = Double.parseDouble(input);
        //  faz o resto

:D :D :D
Funcionou q é uma beleza, brigadão a atenção e a ajuda maninho, um abraço, vo apagar o codigo ali pra evitar qqer coisa hehe

F

Olhando agora, você nem precisaria transformar para número né…
Era só fazer um input.equals(“1”) ou input.equals(“2”);

F

Não apaga nada não. Só coloca [RESOLVIDO] no título.

B

felipeaps:
Olhando agora, você nem precisaria transformar para número né…
Era só fazer um input.equals(“1”) ou input.equals(“2”);

é q sou novão em JAva ainda, 1 semana, e ainda to aprendendo sozinho, tipo to com o Deitel aki e a ajuda d vcs,
então nao entendo muito ainda nao,

B

vou colocar sim,
apaguei soh um pedaço do codigo, o topico nao vou apagar nao

B

Mais uma duvidazinha, coloquei um loop, mas primeiro ele da erro qndo digita 1, e depois q volta ele aceita o 1 normal

import javax.swing.JOptionPane;

public class Teste {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        String eleventhNumber, twelfthNumber, thirteenthNumber, input;
        double quantidadecalor, trabalho, VariacaoEnergia;
        int click ;

        input = JOptionPane.showInputDialog("Digite 1 se a variação de energia interna não for 0"
                + "\n Digite 2 se a variação de enregia interna for 0 ");
        do {
            JOptionPane.showMessageDialog(
                    null, "Error! Digite 1 ou 2", "ERROR !",
                    JOptionPane.ERROR_MESSAGE);

            input = JOptionPane.showInputDialog("Digite 1 se a variação de energia interna não for 0"
                    + "\n Digite 2 se a variação de enregia interna for 0 ");

        } while (!input.trim().matches("[1-2]"));

        click = Integer.parseInt(input.trim());




        if (click == 1) {....
B

Alguemm?

F

Vc sabe a diferença entre os comandos “while” e “do - while”??

Pega um papel, uma caneta e segue seu código na mão. Vê o que ele está fazendo.

B

felipeaps:
Vc sabe a diferença entre os comandos “while” e “do - while”??

Pega um papel, uma caneta e segue seu código na mão. Vê o que ele está fazendo.

“do while” == faça (tal coisa) enqnto entrada nao for == 1-2
while nao consegui fazer nada com while, nao entendi ele

F

Ok, para de dormir na aula. ^^

do - while: Faça o que quiser e depois testa a condição de parada. Se a condição não for satisfeita, repita o loop.

whilhe: Testa a condição de parada. Se a condição não for satisfeita, faça o que quiser, testa condição de parada de novo.

Portanto, não importa oq vc entre de dado aí, ele sempre vai imprimir a mensagem de erro. Por quê?
Porque o do-while primeiro executa o código e depois testa a entrada.

Já que vc não conseguiu fazer nada com o while, troca seu do-while por while e tenta fazer aí.

B

Pois é… tentei fazer aki e deu certo com while,
e essa resposta ja ta la na primeira pagina, o burro aki q nao pretou atenção.

Brigadão pela ajuda aí amigão
abraço

Criado 4 de maio de 2012
Ultima resposta 9 de mai. de 2012
Respostas 23
Participantes 4