JOptionPane

Porque eu não posso fazer isso:


int num = JOptionPane.showInputDialog(null, " Entre com o numero: ");

porque só da pra fazer isso quando a variável for String?

String numero;
		numero = JOptionPane.showInputDialog(null, " Entre com o numero: ");

	int num = Integer.parseInt(numero); // Converte String em Int

	JOptionPane.showMessageDialog(null, num + 3);// Soma o valor do usuário por 3


Você precisa declarar uma String receber o valor do usuário na String e depois converter essa String em um Int.
Pra converter :
int num = Integer.parseInt(numero);

Até mais!

Opa m-bax

[quote] int num = JOptionPane.showInputDialog(null, " Entre com o numero: "); [/quote]

Voce não pode fazer isso, pq a especificação para o o componente JOptionPane foi definida para ter um retorno String.
Tanto que, se o usuário não colocar valor, vai retonar uma String vazia, mas sempre uma String.

Os únicos casos em que vc tem um retorno int são as caixas de confirmação, e os valores possíveis são:

* YES_OPTION
* NO_OPTION
* CANCEL_OPTION
* OK_OPTION
* CLOSED_OPTION 

O q vc pode fazer é converter direto.
Seria a forma mais enxuta do código acima:

int num = Integer.valueOf(JOptionPane.showInputDialog(null, " Entre com o numero: "));

O problema, é se o usuário digitar algo que não seja numero, inclusive se ele não digitar nada.
Para ajudar, dá uma olhada neste tópico abaixo:
http://www.guj.com.br/posts/list/23607.java

Abraços

Para converter uma String para um int, use o método Integer.parseInt, não o método Integer.valueOf.

O Integer.valueOf irá:

  1. Chamar o Integer.parseInt
  2. Procurar um objeto Integer pré criado que se adapte ao resultado (se estiver de -256 e 255 vai achar um);
  3. Se não tiver, criar um novo objeto do tipo Integer;
  4. O java então verá que tem que converter o resultado num int (que é o tipo de sua variável x) e irá chamar o método intValue() automaticamente (auto-unboxing).

Note que no fundo, você só precisava do primeiro passo. Todos os outros foram processamento jogado fora.

Valeu viny

Porque vc tem que sempre converter uma String para Integer.
um exemplo:

int num = Integer.parseInt(JOptionPane.showInputDialog(“Digite o numero”));

Ai dentro da aspas voce pode digitar o que vc quiser para o usuario

[quote=fabianacastelao]Porque vc tem que sempre converter uma String para Integer.
um exemplo:

int num = Integer.parseInt(JOptionPane.showInputDialog(null, “Digite o numero”));

Ai dentro da aspas voce pode digitar o que vc quiser para o usuario.
Desculpe o certo e esse e nao o de cima…

E você ainda pode fazer assim.

try{
    int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero")); 
} catch( NumberFormatException e ){
    JOptionPane.showMessageDialog(null,"Número Inválido");
}

caso o usuário coloque uma letra ou qualquer coisa que torne o número inválido o programa não encerrará e ainda irá informar ao usuário que ele digitou um número não válido.

[quote=SergioFilho]E você ainda pode fazer assim.

try{
    int num = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o numero")); 
} catch( NumberFormatException e ){
    JOptionPane.showMessageDialog(null,"Número Inválido");
}

caso o usuário coloque uma letra ou qualquer coisa que torne o número inválido o programa não encerrará e ainda irá informar ao usuário que ele digitou um número não válido.[/quote]

2 perguntas! é necessário sempre especificar null para JOptionPane.showInputDialog?

outra coisa, no caso de trabalhar com números é utilizado (NumberFormatException e) no catch, e se for ao contrário? para String, e o fulano não pode colocar valor numérico?

  1. O primeiro parâmetro pode ser null, mas é melhor você passar o objeto que corresponde à classe derivada de JFrame ou JDialog que está chamando esse JOptionPane. Se você fizer isso, irá garantir que o JOptionPane fique sempre na frente desse JFrame ou JDialog.
  2. Uma String pode conter qualquer coisa, incluindo um valor numérico. Se o valor é numérico ou não só depende de sua definição. Por exemplo, um programador árabe iria achar que este valor é numérico:
    [size=24]٩٨٧٦٥٤٣٢١٠[/size]

enfatizando:

tudo o q digitar é string. se não quiser q seja número, então vc vai ter utilizar uma estratégia para impedir isso.
abraços

Uma pergunta, a classe JOptionPane não tem nenhum método que aceite direto a entrada de inteiros ou outro tipo numérico?

Ou alguma outra classe então? Porque toda a vida tem que criar uma variável extra para cada atributo e fazer a conversão. Não tem outro jeito? Mais direto?

[quote=Alberto.S]Uma pergunta, a classe JOptionPane não tem nenhum método que aceite direto a entrada de inteiros ou outro tipo numérico?

Ou alguma outra classe então? Porque toda a vida tem que criar uma variável extra para cada atributo e fazer a conversão. Não tem outro jeito? Mais direto?[/quote]

Não necessariamente terá que criar uma variável extra
faça como nosso amigo Sergio Filho

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

[quote=alansystem][quote=Alberto.S]Uma pergunta, a classe JOptionPane não tem nenhum método que aceite direto a entrada de inteiros ou outro tipo numérico?

Ou alguma outra classe então? Porque toda a vida tem que criar uma variável extra para cada atributo e fazer a conversão. Não tem outro jeito? Mais direto?[/quote]

Não necessariamente terá que criar uma variável extra
faça como nosso amigo Sergio Filho

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

Sim, está sendo colocado tudo em uma linha, mas no fim o processo é o mesmo. Me refiro a algo como:

meuInteiro = Classe.metodo("Digite um inteiro: ");

Talvez eu que não esteja entendendo, mas o que você está dizendo, pra mim é a mesma coisa! aguardar alguém responder sua questão! 8)

Não está armazenando uma String e um Int.

A String já é o retorno do JOptionPane. Então, não tem jeito.
O que é diferente:

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

//acima vc tem uma variável declarada (num) e uma implícita, que é o próprio retorno do JoptionPane. (total 2)

//====================

String userAnswer = JOptionPane.showInputDialog(null, "Digite o numero");
int num = Integer.parseInt(userAnswer);

//nesse outro caso, vc tem sim + uma declarada, que é a userAnswer (total 3).

do meu ponto de vista, fazer direto é o melhor.

Assim: essa é a limitação da linguagem: o JoptionPane retorna String.
Porém, Java é mto extendível. Caso vc necessite que seja direto pra int, vc pode desenvolver um complemento pra tal.
Muita gente desenvolve complementos, isso é fácil de se ver por aí.

Blz? deus abençoe
\o/

alansystem, outra coisa que eu quero saber é se isso está de acordo com as blueprints de Java. Para código reutilizável?

Porque o valor passa pela JOptionPane mas não fica armazenada em uma variável antes de ser convertida para inteiro. Está correto isso? :slight_smile:

Fala Alberto

Sim, isso é correto. Mas é meio estranho, não?! Principalmente pra quem tá começando.

A questão é a seguinte: vc vai precisar reutilizar o valor dessa String em algum outro ponto?

  • Se sua resposta for SIM, então, o melhor é armazenar mesmo a String numa variável explícita e fazer a conversão.
  • Porém, se sua resposta for NAO, então não há pq fazer este armazenamento, e a forma direta é a mais indicável!

Ainda assim: cada um faz como quer, dependendo do nível de abastração da linguagem e da necessidade encontrada!

Blz? Abraços
\o/

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

Interessante!

E sobre a questão do Alberto.S, talvez ele esteja tentando perguntar se não existe algum método de alguma classe gráfica que aceite e armazene números, sem precisar dessa conversão.

Opa

Existe o JFormattedTextField.
Através dele vc pode limitar o que vai ser digitado.

So que aqui, não se pode colocar o JFormattedTextField dentro do JOptionPane.
Pra utilizar, vc vai ter que fazer o seu proprio JFrame ou JDialog e, dentro dele, colocar o JFormattedTextField p receber o valor passado pelo usuário.

Blz?
Abraços \o/