Cade a galera que posta duvidas de questoes SCJP 5?

poxa… faz tempo q nao vejo ng postar duvidas de questoes SCJP 5…

vamos usar esse topico para postar algumas questoes ou duvidas… certo?

:wink:

se vc fizer uma pesquisa aqui, tem tantas dicas… que se vacilar temos o exame quase 80% do exame no guj… o importante. para o exame é entender pq nao compila, pq lança exceção e pq o resultado é aquele… as questoes para cada exame é completamente diferente… e as pegadinhas tb… ler as dicas de quem passou… e quem perdeu . é o ideal :smiley:

eu sei… e ja li todas … :wink:

vamos lá…vou aproveitar q estou estudando e mandar uma pergunta…

	int i, j=1;
	i = (j>1)?5:1;    
switch(i) {
       case 0: System.out.println(0); break;
       case 1: System.out.println(1);
       case 2: System.out.println(2); break;
       case 3: System.out.println(3); 
       default : System.out.println(4);
	      }

Esse código TEORICAMENTE imprimiria o valor 1

se alguém não concorda comigo pode dizer… E já aproveita para explicar …

obs.: ele vai imprimir 1, 3, 4.

[quote=Giulliano]vamos lá…vou aproveitar q estou estudando e mandar uma pergunta…

	int i, j=1;
	i = (j>1)?5:1;    
switch(i) {
       case 0: System.out.println(0); break;
       case 1: System.out.println(1);
       case 2: System.out.println(2); break;
       case 3: System.out.println(3); 
       default : System.out.println(4);
	      }

Esse código TEORICAMENTE imprimiria o valor 1

se alguém não concorda comigo pode dizer… E já aproveita para explicar …

obs.: ele vai imprimir 1, 3, 4.[/quote]

por que teoricamente 1?

nao tem break no case do 1… ele imprime 1 e continua nos outros cases imprimindo 2 também… como tem break no 2… ele para… portanto a resposta é 1 e 2

		 int i, j=1;   
		    i = (j>1)?5:1;       
		switch(i) {   
		       case 0: System.out.println(0);   
		       case 1: System.out.println(1);   
		       case 2: System.out.println(2);   
		       case 3: System.out.println(3); break;   
		       default : System.out.println(4);   
		          }  

	}

Pq ele imprimir nesse caso q eu colcoquei agora os valores 1, 2 ,3.

Aí vc disse q é pq não tem break. Perfeito. Acontece que ele NUNCA DEVERIA ter impresso qualquer outro valor que não fosse validado no case.

case 1 é verdadeiro

case 2 é falso…pura lógica cara ele nunca deveria imprimir outra coisa a não ser "1".

ou então, já que, o case é furado ele deveria imprimir tudo até achar um break ??

[quote=Giulliano][code]
int i, j=1;
i = (j>1)?5:1;
switch(i) {
case 0: System.out.println(0);
case 1: System.out.println(1);
case 2: System.out.println(2);
case 3: System.out.println(3); break;
default : System.out.println(4);
}

}

[/code]

Pq ele imprimir nesse caso q eu colcoquei agora os valores 1, 2 ,3.

Aí vc disse q é pq não tem break. Perfeito. Acontece que ele NUNCA DEVERIA ter impresso qualquer outro valor que não fosse validado no case.

case 1 é verdadeiro

case 2 é falso…pura lógica cara ele nunca deveria imprimir outra coisa a não ser "1".

ou então, já que, o case é furado ele deveria imprimir tudo até achar um break ??[/quote]

1 - agora vc trocou o case, entao imprime 1,2,3 :lol:

2 - switch-case embora tenha o intuito de substituir ifs-elses repetitivos, a lógica por detrás dele não é semelhante. Repare em primeiro lugar que as condições do case são constantes, de forma que ele avalia o bloco como um todo e não 1 a 1… prova disso que se tu colocar um default antes da instrução correta, não executa default.

Indo ao ponto… é obrigação do desenvolvedor colocar um break; para interromper a instrução case… quando achar a primeira correta… continua executando código abaixo até achar um break ou até o case acabar… isso é regra, nem tem o q discutir. Isso é regra do switch-case…

tudo bem vai…eu não sou nenhum especificador da SUN …mas pra mim fica claro q quem fez isso não foi muito feliz…um case deveria ser um IF e pra isso serve o switch para subustituir IFs encadeados…

mas fmz…

[/]'s