В учебнике Хорстманна (Big Java Late Objects) по java для цикла for, такого как:
for (i = 0; i <= 5; i++)
Хорстманн говорит, что значение i для этого цикла for равно 0 1 2 3 4 5.
Однако мне кажется, что значение i должно заканчиваться на 6, поскольку цикл вводится, когда i имеет значение 5. Что я не понимаю в этих петлях, может кто-нибудь мне объяснить?
(PS. Прошу прощения, если вопрос слишком простой и поэтому не разрешен на этой платформе.)
изменить повторяющееся предложение: мой вопрос не является дубликатом предложенной ссылки, потому что предлагаемая ссылка касается выполнения цикла for, мой вопрос касается обновления переменной i после завершения выполнения. Я понимаю, что если я добавлю оператор System.out.print (i), результат будет 0 1 2 3 4 5, потому что я обновляется после оператора выполнения (в данном случае оператора печати)
Да, но в принятом ответе в дубликате также указано, что обновление i выполняется после выполнения тела (до условия завершения). Автор этого вопроса первоначально спросил, почему цикл печатает i=5, когда условие было установлено на i<5 (это произошло потому, что автор объединил оператор печати с частью приращения.
Это убедительный ответ, и я готов удалить этот вопрос, поскольку он дублируется. Однако я также думаю, что не должен, потому что ответ @Roger Lindsjö больше освещает те, которые были даны в качестве ответа на предложенный пост. В этом случае мне кажется, что есть ничья, и я готов действовать в соответствии с предложением о разрешении ничьей.
Я думаю, вы должны учитывать разницу между тем, что можно наблюдать (максимальное значение i, видимое внутри тела цикла, равно 5) и тем, что происходит «под капотом» (i становится 6, поэтому цикл завершается)




Эта петля
for ( i = 0; i <=5; i ++)
как
int i = 0;
while (i <= 5){ // Exits when i > 5
...
i++;
} // goes back to while-loop check
Вот анатомия цикла for в Java (аналогично C / C++ и некоторым другим языкам)
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
Итак, ваш цикл for будет повторяться 5 раз, и в конце пятой итерации значение i будет увеличено до 6. В этот момент проверка i <= 5 произойдет в последний раз, и она завершится неудачно, поскольку 6 больше, чем 5. .
Чтобы убедиться во всем этом, запустите следующий код Java:
int i;
for (i=0; i <= 5; ++i) {
// empty
}
System.out.println(i);
Вы увидите, что значение i после цикла на самом деле равно 6.
Это более подробный ответ, чем мой, Хорошая работа
Значение I будет заканчиваться на 5, потому что вы выполняете i <= 5. Он проверяет, больше ли I или равен 5, а затем завершает цикл. следовательно, он заканчивался на 5, а не на 6.
Что ж, мужик прав! он повторяется от 0 до 5, потому что ... 1. условие: «i <= 5» 2. Java имеет индекс 0, или, если быть точным, объявив и инициализировав переменную i = 0, она начнет итерацию с 0 до тех пор, пока условие не вернет false. Решающим моментом здесь является условное давление внутри цикла for. Вы понимаете?
Это рабочая последовательность со значениями, чтобы увидеть, что именно происходит:
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
Вы правы, что значение i увеличивается до 6, а затем условие цикла не выполняется и цикл завершается. Однако автор пытается передать, что значения i, для которых будет выполняться блок цикла for, - это 0, 1, 2, 3, 4, 5.
Вы правы, что значение i будет 6 после завершения цикла, но, возможно, Хорстманн имел в виду значения i внутри цикла?
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);
Выход:
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
И обычно объявляют «счетчик» для цикла в цикле, если значение при завершении не требуется впоследствии.
for (int i = 0; i <= 5; i++) {
}
// i is not available here
В этом есть большой смысл, ведь это напомнило мне, что переменная i существует только внутри цикла foor и «умирает», когда цикл больше не выполняется.
Цикл for завершится на 5, поскольку условие в вашем цикле - i<=5, что означает, что цикл остановится, если он достигнет числа 5.
Возможный дубликат Как цикл for проверяет свои условия в Java?