fiz uma codigo que ao digita os numero 1, 2 ou 3 ele devolve uma String, fiz um IF para eliminar qualquer numero que não seja 1, 2 ou 3 e fiz um try catch para eliminar letras, mas meu problema é que ele esta aceitando numeros fora o 1, 2 e 3. segue abaixo o codigo.
publicstaticvoidquestao2(){try{intnumero=Integer.parseInt(JOptionPane.showInputDialog("Informe um numero entre 1 a 3."));if((numero==1)||(numero==2)||(numero==3)){if(numero==1){JOptionPane.showMessageDialog(null,"Olá");}if(numero==2){JOptionPane.showMessageDialog(null,"Quase");}if(numero==3){JOptionPane.showMessageDialog(null,"Tchau");}else{JOptionPane.showMessageDialog(null,"Informe apenas os números 1,2 ou 3.");questao2();}}}catch(HeadlessException|NumberFormatExceptione){JOptionPane.showConfirmDialog(null,"Por Favor não informe letras.");questao2();}}
if(numero==1){
JOptionPane.showMessageDialog(null,"Olá");
}
elseif(numero==2){
JOptionPane.showMessageDialog(null,"Quase");
}
elseif(numero==3){
JOptionPane.showMessageDialog(null,"Tchau");
}
else{
JOptionPane.showMessageDialog(null,"Informe apenas os números 1,2 ou 3."); questao2();
}
Outra forma seria usar um switch e outra forma por polimorfismo (mais recomendado).
L
lekinhu2013
tipo, o que esta atrapalhando é o IF dentro de outro IF? basta apenas um IF?
EDIT: realmente o IF dentro de outro IF era inutil e estava atrapalhando, retirei e funcionou tranquilo. OBG
rafadelnero
É problema de lógica mesmo!
S
Sem_Nome
O que está atrapalhando é isso:
publicstaticvoidquestao2(){try{intnumero=Integer.parseInt(JOptionPane.showInputDialog("Informe um numero entre 1 a 3."));if((numero==1)||(numero==2)||(numero==3)){//esse if começa aquiif(numero==1){JOptionPane.showMessageDialog(null,"Olá");}if(numero==2){JOptionPane.showMessageDialog(null,"Quase");}if(numero==3){JOptionPane.showMessageDialog(null,"Tchau");}else{JOptionPane.showMessageDialog(null,"Informe apenas os números 1,2 ou 3.");questao2();}}//e termina aqui}catch(HeadlessException|NumberFormatExceptione){JOptionPane.showConfirmDialog(null,"Por Favor não informe letras.");questao2();}}
Ele nunca ira cair na última clausula else.
rnldfll
try{intnumero=Integer.parseInt(JOptionPane.showInputDialog("Informe um numero entre 1 a 3.")); if((numero==1)||(numero==2)||(numero==3)){if(numero==1){JOptionPane.showMessageDialog(null,"Olá"); }if(numero==2){JOptionPane.showMessageDialog(null,"Quase"); }if(numero==3){JOptionPane.showMessageDialog(null,"Tchau"); }//tireioelsedaqui; }else{//ecoloqueiaqui;JOptionPane.showMessageDialog(null,"Informe apenas os números 1,2 ou 3."); questao2(); }
O foco do seu problema está aí, você está impedindo que outros números a não ser 1, 2 ou 3 entrem no seu if.Por isso é impossível cair no else.
L
lekinhu2013
rnldfll:
try{intnumero=Integer.parseInt(JOptionPane.showInputDialog("Informe um numero entre 1 a 3.")); if((numero==1)||(numero==2)||(numero==3)){if(numero==1){JOptionPane.showMessageDialog(null,"Olá"); }if(numero==2){JOptionPane.showMessageDialog(null,"Quase"); }if(numero==3){JOptionPane.showMessageDialog(null,"Tchau"); }//tireioelsedaqui; }else{//ecoloqueiaqui;JOptionPane.showMessageDialog(null,"Informe apenas os números 1,2 ou 3."); questao2(); }
entao mano, não pode termina ae, por que ai tem um try catch, não pode substituir o catch por um else, esse try catch serve para não permitir entrada e caracteres que não seja numero inteiro, mais o problema era apenas esse IF :