Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Duvida

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"?

4 respostas

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 ifs 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.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓

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"?

solução!

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!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!

Baita explicaçao Arthur, parabens cara! Agora ficou claro... Obrigado

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software