para loops em java e valores de i

No livro de Horstmann (Big Java Late Objects) em java, para um loop for como:

for (i = 0; i <= 5; i++)

Horstmann diz que os valores de i para este loop for 0 1 2 3 4 5 .

No entanto, parece-me que o valor de i deve terminar em 6, já que o loop é digitado quando o i tem o valor 5. O que eu não estou entendendo sobre esses laços alguém poderia me explicar?

(PS. Sinto muito se a pergunta é muito básica e, portanto, não é permitida nesta plataforma.)

edite sobre a sugestão duplicada: Minha questão não é uma duplicata do link sugerido porque o link sugerido é sobre a execução do loop for, o meu é sobre a atualização da variável i, após o término da execução. Eu entendo que se eu fosse adicionar uma instrução System.out.print (i), a saída será 0 1 2 3 4 5, porque eu sou atualizado após a declaração de execução (nesse caso, a instrução print)

2
adicionado o autor Johan, fonte
Sim, mas a resposta aceita na duplicata também afirma que a atualização de i é executada após a execução do corpo (antes da condição de término). O autor dessa questão perguntou originalmente porque o laço imprimiu i = 5 quando a condição foi definida para i <5 (o que foi porque o autor combinou a instrução print com o incrementar parte.
adicionado o autor Johan, fonte
Essa é uma resposta convincente e estou disposto a excluir essa questão, por ser uma duplicata. No entanto, eu também acho que não devo, porque a resposta do @Roger Lindsjö é mais esclarecedora as que foram dadas como resposta para o post sugerido. Nesse caso, parece-me que há um empate e estou disposto a agir de acordo com uma sugestão de desempate.
adicionado o autor betaD, fonte

9 Respostas

Você está correto que o valor de i será 6 após o loop ter terminado, mas talvez Horstmann quisesse dizer os valores de i dentro do loop?

int i;
for (i = 0; i <= 5; i++) {
    System.out.println("Value of i IN loop: " + i);
}
System.out.println("Value of i AFTER loop: " + i);

Saída:

Value of i IN loop: 0
Value of i IN loop: 1
Value of i IN loop: 2
Value of i IN loop: 3
Value of i IN loop: 4
Value of i IN loop: 5
Value of i AFTER loop: 6

E é costume declarar o "contador" para o loop no loop, a menos que o valor ao finalizar seja necessário posteriormente.

for (int i = 0; i <= 5; i++) {
}
// i is not available here
5
adicionado
Isso faz muito sentido, afinal ele me lembrou que a variável i só existe dentro do loop foor e "morre" quando o loop não é mais executado.
adicionado o autor betaD, fonte

Aqui está a anatomia de um loop para em Java (o mesmo se aplica a C/C ++ e a algumas outras linguagens)

for (int i=0; i <= 5; ++i)

int i=0     initial condition; happens before the loop starts
i <= 5      check is performed BEFORE each iteration of the loop
++i         loop variable is incremented AFTER each iteration

So, your for loop would iterate 5 times, and at the end of the fifth iteration, i would be incremented to 6. At that point, the i <= 5 check would happen one last time, and it would fail, since 6 is greater than 5.

Para se convencer de tudo isso, execute o seguinte código Java:

int i;
for (i=0; i <= 5; ++i) {
   //empty
}
System.out.println(i);

Você verá que o valor de i após o loop é de fato 6.

3
adicionado
Esta é uma resposta mais detalhada que a minha, bom trabalho
adicionado o autor Rab, fonte

as usual condition of loop looks like: for ( i = 0; i < 5; i ++)

1
adicionado

Esse loop

for ( i = 0; i <=5; i ++)

é como

int i = 0;

while (i <= 5){ //Exits when i > 5

   ...

   i++;
}//goes back to while-loop check
0
adicionado

The value of I will end at 5, Because you are doing i <= 5 It checks if I is greater or equal to 5 and then ends the loop. hence making it end at 5 and not 6.

0
adicionado

The for loop will end in 5 since the condition on your loop is i<=5, meaning the loop will stop if it reaches the number 5.

0
adicionado

Well the man is right! it iterates from 0 to 5, because... 1. the condition is „i <= 5“ 2. Java is 0 indexed, or to be exact by declaring and initialising the variable i = 0, it will start iterating from 0 until the condition returns false. The decisive point here is the conditional pressure inside the for-loop You understand?

0
adicionado

Esta é a sequência de trabalho com valores para ver exatamente o que acontece:

i=0 

//tasks

i++ 

i=1 check i<=5 //ok

//tasks

i++

i=2 check i<=5 //ok 
//tasks

i++

i=3 check i<=5 //ok 
//tasks

i++

i=4 check i<=5 //ok 
//tasks

i++

i=5 check i<=5 //ok 
//tasks

i++

i=6 check i<=5 //it's not ok

// exit the loop
0
adicionado

Você está correto que o valor de i é incrementado para 6 e, em seguida, a condição de loop não fica satisfeita e o loop é encerrado. No entanto, o autor está tentando transmitir que os valores de i para os quais o bloco de código for será executado, são 0, 1, 2, 3, 4 5 .

0
adicionado