Lendo Int ou Float com //JOptionPane.showInputDialog

11 respostas
E

Olá Pessoal!
Como faço para ler um tipo diferente de String (int, float, etc) no JOptionPane.showInputDialog?

op = JOptionPane.showInputDialog(null, "Digite o numero: ");

A variável op é do tipo int, quando eu chamo o método acima ele pede pra converter a variável para o tipo String. :frowning:

Desde já agradeço.

11 Respostas

DavidUser

leia sobre metodos de conversão.
no caso a estrutura é assim:
.parse(String);

exemplo:

(resolvendo seu problema)

int op =Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero: "));
DavidUser

op = a resposta que deve ser inteira
JOptionPane.showInputDialog(null, "Digite o numero: ") = é do tipo String

Método Integer.parseInt = converte String para Inteiro,

Faz parte do pacote java.lang
no Inteiro java.lang.Integer

leia aki os métodos de converção.

Eduardog

Boa Tarde elizier,

A resolução do seu problema esta em você criar uma variável do tipo String que receba este valor do InputDialog e converte-la para o seu tipo desejado

String recebe = JoptionPane.showInputDialog(null,"Entre com um valor");

       int converteRecebeInt = Integer.parseInt(recebe); // converte String para int
       float converteRecebeFloat = Float.parseFloat(recebe); //converte String para float
       double converteRecebeDouble = Double.parseDouble(recebe); //converte de String para Double

Se você estava querendo converter ou atribuir diretamente não é possível, pois, o metodo showInputDialo(); só retorna valores do tipo String

Espero ter ajudado,
:smiley:

DavidUser

Sim, uma showInputDialog() so emite valores inteiros, mas
é sim possível declara e atribuir da seguinte forma: (já se converte a string emitida na própia atribuição).

como recebe é a String com valor declarado o InputDialog utilize o própio valor:

int converteRecebeInt = Integer.parseInt(JoptionPane.showInputDialog(null,"Entre com um valor" ); // converte a String recebida do input para int

inteiro converteRecebeInt [color=red]recebe o[/color] [color=blue]valor inteiro[/color] da InputDialog

E

Obrigado pela ajuda.

M

Para converter números de ponto flutuante, estes devem estar com vírgula como separador decimal. E eu recomendo que se use double.

Por exemplo:

String valorDigitado = JOptionPane.showInputDialog(null, "Digite o preço do produto:");
double preco = Double.parseDouble(valorDigitado);
JOptionPane.showMessageDialog(null, "Preço digitado: " + preco);
E

Mas eu usei virgula como separador decimal e deu erro. Depois usei ponto e deu certo, inclusive fiz uma soma pra ver se tinha convertido mesmo.
Eu fiz do jeito que DavidUser explicou. É mais prático.

R

Não é vírgula, é ponto.

Att. Thiago Rizzo.

DavidUser
cria um método de teste para impedir esses erro olha ai o método tipo encontra o tipo:
public static void main(String[]args){
        String x=JOptionPane.showInputDialog(null,"Entre com um valor" );
        float converteRecebeInt;
        if (tipo(x)==true){
        converteRecebeInt = Float.parseFloat(JOptionPane.showInputDialog(null,"Entre com um valor" ));
        }else converteRecebeInt = Float.parseFloat(JOptionPane.showInputDialog(null,"Entre com um valor" ));
        
    }
    //encotra o tipo, true para inteiro, false para String.
        public static boolean tipo(String x){
        boolean z=true;
        try{
        if (Integer.parseInt(x)!=0);
        z=true;
        if (x.equals("0")) z=true;
        }catch(Exception e){
            JOptionPane.showMessageDialog(null,"VALOR INVÁLIDO!\nOs numeros são separados por ponto,\n\bcarácteres inválidos:\b\nA-Z, a-z, ^,~,/,\,',\",!,?,@,#,$,%,¨,&,*,(,),[,],+,-,|,.,;,=","ERRO",JOptionPane.ERROR_MESSAGE);
        z=false;
        }
        return z;
        }
da uma olhada se não entendeu pergunta aki q eu explico.(testa ai pra ver oq acontece)
DavidUser
corrigindo agora ele lê e se inválido repete a pergunta:
String x=JOptionPane.showInputDialog(null,"Entre com um valor inteiro:");
        float converteRecebeInt;
        while (tipo(x)==false){
            x=JOptionPane.showInputDialog(null,"Entre com um valor válido:");
        }
        if (tipo(x)==true)converteRecebeInt = Float.parseFloat(x);
        
    }
        public static boolean tipo(String x){
        boolean z=false;
        try{
        if (x.equals("0"))z=true;
        if (Integer.parseInt(x)!=0);
        z=true;
        }catch(Exception e){
            JOptionPane.showMessageDialog(null,"\"VALOR INVÁLIDO!\nOs numeros são separados por ponto,\n\bcarácteres inválidos:\b\nA-Z,  a-z,  ^,  ~,  /,  \,  ',  \",  !,  ?,  @,  #,  $,  %,  ¨,  &, \n*,  (,  ),  [,  ],  +,  -,  |,  .,  ;,  = \"","ERRO",JOptionPane.ERROR_MESSAGE);
        z=false;
        }
        return z;
        }
dler

Amigo seu programa nao esta funcionando corretamente pelo menos tentei executar ele aki e deu um problema.
Ele nao aceita o numero separado por ponto ele informa que foi digitado errado mesmo usando o ponto para separar os numeros.
Gostaria de poder utilizar essa funcao em um programa que estou desenvolvendo se conseguir postar a correcao agradeceria!
:stuck_out_tongue:

Criado 18 de abril de 2009
Ultima resposta 12 de jan. de 2010
Respostas 11
Participantes 6