Duvida com Loop[Resolvido]

Amigos, mais uma vez estou precisando de ajuda de vocês, me deparei com o seguinte exemplo abaixo:

public class Teste7 {
	public static void main(String[] args) {
		final int x = 2;
		for( int i = 0; i < 4; i++){
			switch(i){
			case x - 1:System.out.print("1 ");
			default: System.out.print("def ");
			case x:System.out.print("2 ");break;
			case x + 1: System.out.print("3 ");
			}
		}
	}

}

Na explicação do resultado o autor colocou o seguinte teste de mesa para justificar a saída: def 2 1 def 2 2 3

i vale 0 = def 2
i vale 1 = 1 def
i vale 2 = 2
i vale 3 = 2 3

A minha duvida está em quando i vale 2, o correto não seria nesse momento exibir 1, que é o primeiro case, depois 2 que é o segundo e exibir o default, porque é nele que está o break? Além disso quando i vale = 3 não deveria exibir 1 def 2? O resultado é exatamente o que o autor indica no livro, só não entendi a explicação, agradeço desde já pela ajuda, abraços a todos.

Dica: Use um depurador.


Não, quando i vale 2 ele vai exibir o case x pq x vale 2, vai imprimir 2 e depois cai no break.

Não, quando i vale 3, ele vai exibir o case x + 1 pq 2 + 1 é igual a 3, então ele imprime 3.

O processo exato seria esse:
i vale 0 = def 2 -> imprime default(pq não existe um x igual a zero) e como não tem break após o default, ele vai imprimindo até achar um break ou terminar as opções.
i vale 1 = 1 def 2 -> imprime 1(pq x - 1 é igual a 1) como não tem break ele continua e imprime def, e como não tem break ele continua e imprime 2 quando encontra o break e volta para o for.
i vale 2 = 2 -> já expliquei acima
i vale 3 = 3 -> já expliquei acima

Obrigado Viny e Romarcio,

O primeiro pelo link do video, que mesmo meu ingles nao sendo dos melhores me ajudou a entender como fazer o debug, alem disso nas ultima duvida que postei me forneceu resposta que me ajudou a entender o exercicio proposto.

O segundo pela paciencia de preparar uma explicacao para o problema, com certeza foi esclarecedor. Muito bom fazer parte deste forum por causa de pessoas como voces. Parabens e uma grande abraco.

Fazer debug é uma das principais ferramentas do dia-a-dia de um programador. Vale MUUUUUITO à pena aprender. Além disso, ela é excelente para resolver questões desse tipo. Você vê passo a passo o programa sendo executado, olhando valores de variáveis no processo. Não deixe de usar nunca.

Valeu Vini,

Esta semana fiz minha primeira entrevista de emprego para programador junior, mas sofri com a falta de conhecimento sobre o ambiente de trabalho mesmo, e vi o quanto ainda tenho que aprender, por outro lado, fazer desenvolvimento atraves de cursos e exemplos de livro nao me da toda a experiencia que preciso, mas nao vou desistir, tenho feito algumas coisas simples, seguindo tutoriais de gente que esta sempre disposta a ensinar, lendo muito e principalmente praticando muito. Assim quando uma empresa me der a primeira chance nao estarei tao perdido. Isso era uma coisa que eu nao sabia fazer, assim como nao sei trabalhar com ferramenta de teste, na verdade nem as conheco direito, mas vamos em frente, so tem um jeito de aprender…estudando e fazendo…e vontade nao me falta. Grande abraco.