Switch case ...bizarro

Pessoal,

Como é q o pode cair no case x-1 se o valor do i é 2?

public class Caso {

	public static void main(String[] args) {

		final int x = 2;

		for (int i = 0; i < 4; i++) {
			switch (i) {
			case x:	System.out.println(i+" "+"0");
			case x-1: System.out.println(i+" "+"1");break;
			default: System.out.println(i+" "+"def");
			case x-2: System.out.println(i+" "+"2");
			}
		}

	}

}

resultado: 2 1 0 1 def 2

Repita comigo: nunca se esqueça de pôr um “break” para finalizar um “case”. É a falta do “break” em todos os casos que lhe confundiu a cabeça.

kra…pode parecer coisa de newbie …mas não faz sentido ele entrar em um case que não é dele. Pra mim o case é um substituto do if. Sei la, agora vi isso vou ficar ligado no exame.

Cara,

Faça o passo-a-passo:

Iteração 1: x = 0, logo executa o case x-2;
Iteração 2: x = 1, logo executa o case x-1;
Iteração 3: x = 2, logo executa o case x e o case x-1;
Iteração 4: x = 3, logo executa o case default e o case x-2;

Talvez você esteja se confundindo com o break e o case default. Como boa prática, e a menos que você tenha uma ótima razão para fazer diferente, sempre coloque o case default como a última opção.

o “switch/case” é um substituto do “goto controlado” do Fortran, na verdade.
É uma coisa tão antiga que você nunca deve ter ouvido falar nele.
Deixo a explicação a aqueles carinhas que conhecem Fortran aqui no Fórum. :stuck_out_tongue:

O Resultado é este:

0 2
1 1
2 0
2 1
3 def
3 2

e é o correto, pois como o thingol falou, vc não usou breaks. Assim quando um case é satisfeito, o switch executa até o próximo break OU até o final do switch.