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

Nao entendi

Ola Pessoal,

Nao sei como fazer a leitura deste codigo, alguem poderia ajudar?

class A {
    public static void main(String[] args) {
        int x[] = new int[3];
        for(x[1]=x.length-1;x[1]>=0;x[1]--) {
            x[x[1]]=-5;
            System.out.println(x[1]);
        }
    }
}

Obrigado

2 respostas
solução!

Fala Everson, tudo bem?

Realmente, exercícios para a prova de certificação tendem a ter código um tanto quanto misterioso e que dificilmente veremos no dia a dia de desenvolvimento haha!

Mas vamos lá!

int x[] = new int[3]

Declaração de um array (ou vetor) de inteiros com três posições. Se pudessemos visualizar seu estado após a declaração seria algo como:

//0   1   2 (posições)
 {0 , 0 , 0}

Após a declaração, executamos o loop

 for(x[1]=x.length-1;x[1]>=0;x[1]--) {
            x[x[1]]=-5;
            System.out.println(x[1]);
}

Para entender melhor, vamos olhar linha a linha:

 for(x[1]=x.length-1;x[1]>=0;x[1]--)

Onde fazemos a declaração do loop for, lembrando que ele tem três partes: (declaração de variáveis; condição de parada; incremento ou decremento de variáveis), então temos:

  • declaração: x[1]=x.length-1- Aqui definimos que o valor na posição 1 do vetor x (x[1]), vai receber o valor x.length - 1. Nesse caso, como declaramos o vetor com três posições, o valor de x.length é 3 (lembrando que length é a propriedade que guarda o tamanho de um vetor). E após a subtração, guardamos na posição 1 do vetor, o valor 2! Deixando o nosso vetor assim:

    //0   1   2 (posições)
    {0 , 2 , 0}
  • condição de parada: x[1]>=0 - Definimos que o loop vai continuar iterando enquanto essa condição for verdadeira, podemos ler: enquanto o valor na posição de número 1 do vetor for maior ou igual a 0, execute o trecho de código.

  • Incremento/decremento x[1]-- - Nesse trecho, definimos que a cada iteração o valor na segunda posição do vetor x[1], vai diminuir em 1.

Sabendo disso, podemos olhar para dentro do bloco for:

x[x[1]]=-5;

Essa linha, que pode causar um pouco de confusão pela quantidade de colchetes, faz o seguinte:

  • Pega o valor de x[1] (na primeira iteração, como vimos, o valor é 2)
  • Coloca o valor -5 dentro da posição x[2] (como vimos acima, x[1] guarda o valor 2]

Nos deixando com o vetor no seguinte estado:

//0   1   2 (posições)
  {0 , 2 , -5}

Por fim

System.out.println(x[1]);

Mostramos o valor guardado dentro de x[1], que na primeira iteração é 2 e decrementamos o valor de x[1], que passa a ter o valor 1

Na segunda iteração, iniciamos com o vetor dessa maneira:

//0   1    2 (posições)
  {0 , 1 , -5}

E fazemos a verificação x[1] >= 0, como nosso x[1] guarda o valor 1, essa condição é verdadeira e voltamos a executar o código.

Começamos na execução da linha

x[x[1]]=-5;

Onde verificamos que x[1] vale 1, então podemos substituir em

x[1] = -5;

Deixando o nosso vetor no seguinte estado:

//0    1    2 (posições)
  {0 , -5 , -5}

Por fim, mostramos na tela o valor de x[1], que agora é -5, e decrementamos esse valor em 1, deixando nosso vetor:

//0    1    2 (posições)
  {0 , -6 , -5}

Agora, ao refazer a verificação x[1] >= 0, encontraremos o resultado false, pois -6 é menor que 0, e o loop se encerrará.

Tendo como saída no terminal os dois prints do valor de x[1]:

// Saída do código
2
-5

Em geral, esses exercícios caem muito nas provas de certificação, para garantir a sua intimidade com a linguagem e tendem a ser um pouco confusos à primeira vista, mas não se preocupe! Com o tempo eles ficam mais claros e faz parte do processo eles serem difíceis.

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!

Cara, Explicacao muito didatica, preciso ler mais e praticar... Muitissimo obrigado Arthur

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