Sobre IF

8 respostas
L

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.

public static void questao2(){
  
        try {
            int numero = 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 | NumberFormatException e) {
            JOptionPane.showConfirmDialog(null, "Por Favor não informe letras.");
            questao2();
        }
    }

8 Respostas

S

Você poderia fazer:

if(numero == 1) {
JOptionPane.showMessageDialog(null, "Olá");  
}
else if(numero == 2) {
JOptionPane.showMessageDialog(null, "Quase"); 
}
else if(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

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

O que está atrapalhando é isso:

public static void questao2(){  
    
        try {  
            int numero = Integer.parseInt(JOptionPane.showInputDialog("Informe um numero entre 1 a 3."));  
         
            if((numero == 1)||(numero == 2)||(numero == 3)){  //esse if começa aqui
                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();  
                }         
            }  //e termina aqui
              
        } catch (HeadlessException | NumberFormatException e) {  
            JOptionPane.showConfirmDialog(null, "Por Favor não informe letras.");  
            questao2();  
        }  
    }

Ele nunca ira cair na última clausula else.

rnldfll
try {  
            int numero = 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");  
                } //tirei o else daqui;      
            }else{  //e coloquei aqui;
                    JOptionPane.showMessageDialog(null, "Informe apenas os números 1,2 ou 3.");  
                    questao2();  
                }
lina

Oi,

A solução simples é usar o switch/case.

switch(numero) {

   case 1: 
   {

       break;
   }

   case 2:
   {

       break;
   }

   case 3: 
   {

       break;
   }

   default: 
   {
       break;
   }
}

Tchauzin!

rafadelnero
if((numero == 1)||(numero == 2)||(numero == 3))

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
rnldfll:
try {  
            int numero = 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");  
                } //tirei o else daqui;      
            }else{  //e coloquei aqui;
                    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 :
if((numero == 1)||(numero == 2)||(numero == 3)){
retirei ele o codigo rodou tranquilo.
Criado 22 de março de 2013
Ultima resposta 22 de mar. de 2013
Respostas 8
Participantes 5