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

Dúvida sobre escopo

Oi, gente. Tudo bem? Estou lendo o livro "Java" da série "Use a cabeça" e nele têm alguns exercícios e também as soluções. Mas uma solução em específico me deixou meio confusa e eu não sabia direito onde procurar. Enfim, temos esse código:

class Shuffle1 {
    public static void main (String[] args) {
    int x = 3;
    while (x > 0) {
        if (x  > 2) {
            System.out.print("a");
            } // fim do if

            x = x - 1;
                System.out.print("-");

            if  (x == 2)  {
                System.out.print("b c");
            } // fim do if

            if (x == 1) {
                System.out.print("d");
                x = x - 1;
            } // fim do if
        } // fim do loop while
    } // fim do método main
} // fim da classe

a saída esperada é a-b c-d

minha dúvida é: por que nesse trecho de código,

if (x == 1) {
    System.out.print("d");
        x = x - 1;
}

o x = x - 1 se encontra nesse if e embaixo da saída "d" em vez de diretamente depois da saída "b c" como aconteceu após a saída "a"?

2 respostas
solução!

Olá Ingryd!

Neste caso a atribuição de X está sendo feita dentro do IF para que o loop passe duas vezes pelo while e imprima os hifens entre as letras "a-b c-d". Da forma como está, o X só será 1 quando passar pelo while pela segunda vez e assim teremos os 2 hifens na posição da resposta, caso contrário o segundo hífen ficaria no final.

Se a atribuição acontecesse como você citou ficaria assim:

class Shuffle1 {
    public static void main (String[] args) {
    int x = 3;
    while (x > 0) {
        if (x  > 2) { (X=3) (X = 1 na segunda interação, então não entraria)
            System.out.print("a");
        } // fim do if

        x = x - 1; (X=2) (X=0 na segunda interação)
        System.out.print("-");

        if  (x == 2)  { (X=2) (X=0 na segunda interação, então não entraria)
          System.out.print("b c");
        } // fim do if
         x = x - 1; (X=1) (X = -1 na segunda interação)
         if (x == 1) { (X=1) (X=-1 na segunda interação, então não entraria)
           System.out.print("d");
         } // fim do if
        } // fim do loop while
    } // fim do método main
} // fim da classe

O output seria: "a-b cd-"

Espero ter ajudado e bons estudos!

Muito obrigada, Vinicius :)

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