No codigo abaixo, de ex:
int valor =100 if (valor > 200) if (valor < 400) if (valor > 300) System.out.println("a"); else System.out.println("b"); else System.out.println("c");
Fiquei com uma pequena duvida, pq nao imprime "b" ou "c"?
No codigo abaixo, de ex:
int valor =100 if (valor > 200) if (valor < 400) if (valor > 300) System.out.println("a"); else System.out.println("b"); else System.out.println("c");
Fiquei com uma pequena duvida, pq nao imprime "b" ou "c"?
Fala Everson, tudo certo?
Isso acontece porque se tratam de ifs aninhados! Ou seja, if dentro de if. Quando existe esse tipo de estrutura, os if
s mais internos apenas são executados se os mais externos também forem! Como assim?
int valor = 100;
if (valor > 200) // false
if (valor <400) // true, porém ele está dentro do if acima, isso é, não será executado pois o anterior é false.
if (valor > 300) // false, mas o código nem vai chegar até aqui porque a condição valor > 200 é false!
System.out.println("a");
else
System.out.println("b");
else
System.out.println("c");
Sendo assim, os trechos de códigos responsáveis por imprimir 'c' e 'b' na tela não são sequer alcançados, devido à condição valor > 200
não ser verdadeira.
Fico à disposição em caos de dúvidas!
Um grande abraço e bons estudos.
Ola Arthur,
Entao se o codigo fosse assim:
int valor = 100; if (valor < 200) //true if (valor < 400) //true if (valor > 300) //false System.out.println("a"); else System.out.println("b"); else System.out.println("c");
A resposta seria "a" e "b"?
Fala Everson!
Com o código
public static void main(String args[]) {
int valor = 100;
if (valor < 200) //true
if (valor < 400) //true
if (valor > 300) //false
System.out.println("a");
else
System.out.println("b");
else
System.out.println("c");
}
A saída será o caractere b
! Vamos entender:
A variável valor tem o valor 100
, e quando ela passa pela primeira verificação valor < 200
, ela entra no bloco, pois é verdadeiro. Após isso, é feita a verificação valor < 400
, no if mais interno, que também é verdadeiro e por este motivo o programa entra na ultima verificação, valor > 300
. Esta última verificação tem valor false
, então caímos no bloco else
, que imprime o caractere "b"
na tela!
Perfeito, mas por que apenas é impresso o caractere b?
Isso acontece porque os blocos if-else
executam apenas uma instrução do seu bloco, ou seja, quando a condição for true o condicional executa o que estiver dentro do bloco if, quando for falsa, executa o bloco else. Então outra maneira de pensar nesse mesmo código seria olhar apenas para os blocos que estão sendo executados.
No início:
if (valor < 200) //true
if (valor < 400)
if (valor > 300)
System.out.println("a");
else
System.out.println("b");
else
System.out.println("c");
Sabemos que a verificação foi verdadeira, então mergulhamos mais um nível:
if (valor < 400) //true
if (valor > 300)
System.out.println("a");
else
System.out.println("b");
else
System.out.println("c");
Novamente a condição é verdadeira, entramos mais um nível:
if (valor > 300) //false
System.out.println("a");
else
System.out.println("b");
Agora nos restou o último nível, onde a verificação é false, então será executado o bloco else
!
É sempre muito útil pensar em níveis, ou camadas, quando lidamos com blocos aninhados! Sejam eles condicionais ou de repetição.
Em caso de dúvidas, estou por aqui.
Um grande abraço e bons estudos!
Baita explicaçao Arthur, parabens cara! Agora ficou claro... Obrigado