Olá pessoal queria uma ajuda,comecei semestre passado Ciëncia da Computaçäo e gostaria de aprender Java estou pesquisando e estudando pela net achei varios topicos interessantes nesse forum.
Agora gostaria de contar com a ajuda de vcs tranquei em uma parte do meu programa onde gostaria de ler apenas numeros,uma parte ate ja consegui, que é fazer ele aceitar apenas o numero 1 e 2…
Agora gostaria que alguem me ajuda se a fazer com q bloquei quando digitar letras…
Essa parte eu ja consegui:
//Pede o categoria do produto
String Produto = JOptionPane.showInputDialog(“PRODUTO 1-ROUPA 2-CALÇADOS”);
//ignora numeros maiores que 2
if (Integer.valueOf(Produto) > 2 )
JOptionPane.showMessageDialog(null,"Voce digitou um valor invalido: " + Produto);
Desde ja agradeço a ajuda!!!
[quote=@dler]Olá pessoal queria uma ajuda,comecei semestre passado Ciëncia da Computaçäo e gostaria de aprender Java estou pesquisando e estudando pela net achei varios topicos interessantes nesse forum.
Agora gostaria de contar com a ajuda de vcs tranquei em uma parte do meu programa onde gostaria de ler apenas numeros,uma parte ate ja consegui, que é fazer ele aceitar apenas o numero 1 e 2…
Agora gostaria que alguem me ajuda se a fazer com q bloquei quando digitar letras…
Essa parte eu ja consegui:
//Pede o categoria do produto
String Produto = JOptionPane.showInputDialog("PRODUTO 1-ROUPA 2-CALÇADOS");
//ignora numeros maiores que 2
if (Integer.valueOf(Produto) > 2 )
JOptionPane.showMessageDialog(null,"Voce digitou um valor invalido: " + Produto);
Desde ja agradeço a ajuda!!![/quote]
André Fonseca com certeza usar Regex seria a melhor opção, mas o nosso amigo quer fazer um teste simples acho que iria complicar mais do que ajudar.
vou tentar simplificar um pouco.
o metodo parseInt lança uma exceção nao verificada “NumberFormatException” onde quero chegar com isso?
sempre que se tenta fazer parse de algo que nao seja um numero valido é lançada uma exceção.
vou deixar claro que essa nao é a melhor maneira pra fazer isso, mas ninguem morrerá por isso. vamos la:
[code]
import javax.swing.JOptionPane;
public class Test
{
public static void main(String[] args) throws Exception {
String numero = JOptionPane.showInputDialog(“digite um numero:”);
int n = 0;
try
{
n = Integer.parseInt(numero);//se nao for um numero lança exceção
// faça o que quiser com 'n'
}catch(NumberFormatException nfe)
{
JOptionPane.showMessageDialog(null, "numero invalido");
}
}
[quote=a.gomes]André Fonseca com certeza usar Regex seria a melhor opção, mas o nosso amigo quer fazer um teste simples acho que iria complicar mais do que ajudar.
vou tentar simplificar um pouco.
o metodo parseInt lança uma exceção nao verificada “NumberFormatException” onde quero chegar com isso?
sempre que se tenta fazer parse de algo que nao seja um numero valido é lançada uma exceção.
vou deixar claro que essa nao é a melhor maneira pra fazer isso, mas ninguem morrerá por isso. vamos la:
[code]
import javax.swing.JOptionPane;
public class Test
{
public static void main(String[] args) throws Exception {
String numero = JOptionPane.showInputDialog(“digite um numero:”);
int n = 0;
try
{
n = Integer.parseInt(numero);//se nao for um numero lança exceção
// faça o que quiser com 'n'
}catch(NumberFormatException nfe)
{
JOptionPane.showMessageDialog(null, "numero invalido");
}
}
}[/code][/quote]
Ou seja se não sabe expressões regulares mete gambi que resolve…
private boolean isNumber(String str) {
Pattern p = Pattern.compile("[0-9]+");
Matcher m = p.matcher(str);
return m.find();
}
Não sei se funfa mesmo… não testei aqui… mas creio que ta certo…
agora essa de converter em numero pra ver se ocorre exceção de parse é uma grande gambiarra…
Não é gambiarra ou “recurso técnico alternativo” não, pois:
a) A expressão regular que faz a mesma coisa é mais lenta que simplesmente você capturar uma ParseException;
b) Isso é parecido com o que você faria em várias outras linguagens.
como sera q a api faz para verificar se ocorreu um parse exception ao vc tentar converter uma String em numero?
nunca olhei a fundo… porem tenho ctza que utiliza um recurso parecido com “ER” se não utilizar “ER” ao menos ela faz um algoritimo pra esta validação… ou seja em termos de velocidade é a mesma coisa… pois isto não é uma exeção de runtime e sim uma exceção feita atravez de validação… se fosse uma exceção de runtime como uma divisão por zero por exemplo a vm pode capturar uma interupção de nivel baixo e lançar a exceção dai sim seria bem mais rapido…
Exceções devem ser usadas pra tratar erros e não fazer validações…