Caixa de entrada ler apenas numeros [RESOLVIDO]

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.

[code] 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);}

[/code]

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.

[quote=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.[/quote]

Ou simplesmente:

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

[quote=nel][quote=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.[/quote]

Ou simplesmente:

if (!input.trim().matches("\\d+")) { System.out.println("Digite somente números"); return; } else { click = Double.parseDouble (input.trim()); }[/quote]
Regex não é meu forte.
Enfim, é uma solução válida e simples.

[quote=drsmachado][quote=nel][quote=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.[/quote]

Ou simplesmente:

if (!input.trim().matches("\\d+")) { System.out.println("Digite somente números"); return; } else { click = Double.parseDouble (input.trim()); }[/quote]
Regex não é meu forte.
Enfim, é uma solução válida e simples.[/quote]

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.

[code]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);

    }

[/code]

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

[quote=bixigas][code]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);

    }

[/code]

fiz assim e rodou direitinnho, brigadão aew galera, são feras (Y)[/quote]
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.

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);
        {
        }

Troca o || por &&.

nao deu certo , tentei isso tbm , mas deu errado

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

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

Abraços.

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

Abraços.[/quote]

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+")));
        

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);
        // Aí faz o resto

[quote=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.

[code]
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);
    // Aí faz o resto

[/code][/quote]

:smiley: :smiley: :smiley:
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

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

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

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

é 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,

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

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) {....

Alguemm?