poxa… faz tempo q nao vejo ng postar duvidas de questoes SCJP 5…
vamos usar esse topico para postar algumas questoes ou duvidas… certo?

poxa… faz tempo q nao vejo ng postar duvidas de questoes SCJP 5…
vamos usar esse topico para postar algumas questoes ou duvidas… certo?

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 
eu sei… e ja li todas … 
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