If dentro de Swith Case

Tubo Galera estou montando um algoritimo em java.

estou usando Swith Case e me deu uma dúvida:

Eu tenho como usar o if dentro do Swith Case?

eu fiz o código da seguinte forma fiz um swith com o código desejado, mas como vários códigos repetiam a mensagem eu no meio dele criei uma comparação falando há se de tanto a tanto && de tanto a tanto faça tal coisa. Mas não funciona. Cheguei a fazer outro programa meio parecido mas os if eu usava apenas fora do swith case.

codigo de ex:

[code]
/**
*
*/
package com.fiap.ex18;

import javax.swing.JOptionPane;

/**

  • @author PAULO
    1. Escreva um programa que leia o código de um determinado produto e mostre a
  • sua classificação. Utilize a tabela abaixo como referência:
  • Código Classificação
  • 1 Alimento não-perecível
  • 2, 3 ou 4 Alimento perecível
  • 5 ou 6 Vestuário
  • 7 Higiene pessoal
  • 8 até 15 Limpeza e utensílios domésticos
  • Qualquer outro código
  • Inválido

*/
public class Ex18 {

public static void main(String[] args) {
	
	short codigo;
	
	codigo = Short.parseShort(JOptionPane.showInputDialog("Digite o Código do Produto Desejado:"));
	
	switch (codigo) {
	case 1:
		JOptionPane.showMessageDialog(null, "Alimento Não Perecivel");
		break;
		
	case 2:
		JOptionPane.showMessageDialog(null, "Alimento Perecivel");
		
		if (codigo > 2 && codigo <= 4){
			
			JOptionPane.showMessageDialog(null, "Alimento Perecivel");
			
		}
		break;
	case 5:
		JOptionPane.showMessageDialog(null, "Vestuário");
		break;
	case 6:
		JOptionPane.showMessageDialog(null, "Vestuário");
		break;
	case 7:
		JOptionPane.showMessageDialog(null, "Higiene pessoal");
		break;
	case 8:
		JOptionPane.showMessageDialog(null, "Limpesa e Utensílios Domésticos");
		

		if (codigo > 8 && codigo <= 15){
			
			JOptionPane.showMessageDialog(null, "Limpesa e Utencilios Domésticos");
			
		}
		
		break;
	default:
		break;
	}
	
	if (codigo < 1 && codigo > 15){
		
		JOptionPane.showMessageDialog(null, "Código Inválido");
		
	}
	
}

}[/code]

fico no aguardo de uma ajuda.

Se você já sabe que o codigo é 2 (caso contrário, não entraria no case 2: do seu switch), não adianta colocar um if perguntando se ele é > 2 e <= 4.
Se ele é 2, ele não é 3 ou 4.

Além disso, por favor, se for postar códigos, siga essas dicas:

Que erro dá ??
Vc já tentou ver ser ta caindo na condição ou não ??
tenta colocar uma impressão dentro do if para ver se ta entrando nele…

eu aconselho você a chamar um método dentro do break que verifique essa condição, acho mais facil de organizar …

Boa noite amigos,

Da maneira que vc esta tentando fazer não vai rolar acredito que pra você o mais aconselhável seria uma abordagem como segue o exemplo abaixo:

        switch (codigo) {
            case 1: case 5:
            case 7: case 8:
            case 10: case 12:
               //Seu codigo
                break;
            case 6: case 9: case 11:
               //Seu codigo
                break;
            case 2: case 3: case 4:
                //Seu codigo
                break;
            default:
                System.out.println("Código inválido");
                break;
        }

Você perde um pouco a legibilidade do seu código mas deve resolver.

Espero ter ajudado…

Então sobre o erro ele não dá erro ele não cai na condição ele só fecha o programa.

outra alternativa foi eu tirar os if de dentro swith case e colocar so no final fora dele criando as condições ai ele funcionou. mas uma coisa engraçada foi que eu tinha que por um número a mais ou a menos.

ex:

if (codigo >= 3 && codigo <= 4){
			
			JOptionPane.showMessageDialog(null, "Alimento Perecivel");
			
		}else if (codigo < 1 && codigo > 15){
			
			JOptionPane.showMessageDialog(null, "Código Inválido");
			
		}else if (codigo >= 9 && codigo <= 15){
			
			JOptionPane.showMessageDialog(null, "Limpesa e Utencilios Domésticos");

e mesmo assim no caso do código invalido ele não funciona mas no outros casos sim.

No código invalido ele nunca vai entrar pois existe um pequeno erro de lógica … o operador que vc deve utilizar é o ‘OU’ e não o ‘E’

valeu pela dica era isto mesmo este erro na minha lógica.

Agora funciona legal.

o que eu fiz foi: :smiley:

[code]
public class Ex18 {

public static void main(String[] args) {
	
	short codigo;
	
	codigo = Short.parseShort(JOptionPane.showInputDialog("Digite o Código do Produto Desejado:"));
	
	switch (codigo) {
	case 1:
		JOptionPane.showMessageDialog(null, "Alimento Não Perecivel");
		break;
	case 2:
		JOptionPane.showMessageDialog(null, "Alimento Perecivel");
		break;
	case 5:
		JOptionPane.showMessageDialog(null, "Vestuário");
		break;
	case 6:
		JOptionPane.showMessageDialog(null, "Vestuário");
		break;
	case 7:
		JOptionPane.showMessageDialog(null, "Higiene pessoal");
		break;
	case 8:
		JOptionPane.showMessageDialog(null, "Limpesa e Utensílios Domésticos");
		break;
	default:
		break;
	}
	if (codigo >= 3 && codigo <= 4){
		
		JOptionPane.showMessageDialog(null, "Alimento Perecivel");
		
	}else if (codigo < 1 || codigo > 15){
		
		JOptionPane.showMessageDialog(null, "Código Inválido");
		
	}else if (codigo >= 9 && codigo <= 15){
		
		JOptionPane.showMessageDialog(null, "Limpesa e Utencilios Domésticos");
		
	}
	
}

}[/code]

E porque não assim?

switch (codigo) {  
        case 1:  
            JOptionPane.showMessageDialog(null, "Alimento Não Perecivel");  
            break;  
        case 2:  
        case 3:  
        case 4:  
            JOptionPane.showMessageDialog(null, "Alimento Perecivel");  
            break;  
        case 5:  
            JOptionPane.showMessageDialog(null, "Vestuário");  
            break;  
        case 6:  
            JOptionPane.showMessageDialog(null, "Vestuário");  
            break;  
        case 7:  
            JOptionPane.showMessageDialog(null, "Higiene pessoal");  
            break;  
        case 8:  
        case 9: 
        case 10: 
        case 11: 
        case 12: 
        case 13: 
        case 14:       
        case 15: 
            JOptionPane.showMessageDialog(null, "Limpesa e Utensílios Domésticos");  
            break;  
        default:  
            JOptionPane.showMessageDialog(null, "Código Inválido");            
            break;  
        }