Я работал над циклом while, в котором i-- уменьшится, но я ожидал, что 10 будет использоваться дважды. На мой взгляд, мы используем 10 в начале, а затем запускается цикл while. Мы пишем 10 из-за System.out.println(i); и тогда мы видим i--; .. Итак, я думаю, что у нас снова есть 10 для использования, а затем мы уменьшаем его до 9. Можете ли вы объяснить, почему вывод возвращается, как показано ниже?
int i=10;
while(i>1){
System.out.println(i);
i--;
}
Ожидаемый результат 10 10 9 8 7 6 5 4 3 2
но это дает 10 9 8 7 6 5 4 3 2
Я думаю, что отладчик был бы вашим лучшим другом для этого.
Цикл входит, i есть 10. Он печатает i, поэтому 10. Далее оно уменьшается i на 1, так что 9. Следующая итерация цикла, печать i, поэтому 9. Не знаю, почему вы ожидали, что 10 придет дважды.




То, что вы сказали, неверно, когда вы входите в цикл while, это уже первая итерация, поэтому первое напечатанное значение равно 10. Затем вы уменьшаете значение, чтобы второе было равно 9.
Но почему? Сначала мы видим печатную команду, а затем мы видим уменьшение i--, которое говорит: «Сначала примите за 10, затем уменьшите до 9». Этот порядок не имеет значения?
@DavyJones Действительно, этот порядок не имеет значения. Это было бы, если бы вы добавили шаги между первым и потом, что вы могли бы. Но нет, так что неважно, что есть первое и потом. И то, и другое происходит, и вы остаетесь с результатом этого.
@DavyJones, как они сказали :) Вы печатаете (так что вы видите 10), затем вы уменьшаете (значение уменьшилось до 9), затем вы снова печатаете на второй итерации (вы видите 9), затем вы уменьшаете ... и так далее. ..
Отредактировано. Я неправильно написал. Мне жаль. Не могли бы вы проверить это еще раз, пожалуйста?
@DavyJones, это точно так же, единственная разница, как сказал GhostCat, будет заключаться в том, будете ли вы использовать --i или i-- внутри System.out.println
Заблуждение с вашей стороны: эти операции до и после исправления влияют только на «текущее» выражение. Например, у них есть понятие нет некоторого вмещающего контекста цикла. Вы предполагаете, что --i каким-то волшебным образом влияет на условие while. Это не так. См. здесь для дальнейшего чтения.
Ваш код идет:
Другими словами: если вы хотите увидеть различия в выводе на печать, измените свой код следующим образом:
System.out.println(--i);
System.out.println(i--);
Например.
В вашем коде есть эта операция на своей линии. Следовательно, эта строка может быть записана как i--, --i, i = i -1 или i -= 1. Не имеет значения. Выражение уменьшает i и сохраняет новое значение. Опять же: чтобы увидеть другой результат, вам нужно напрямую использовать результат этой операции!
Вы печатаете
iтолько один раз, прежде чем оно изменится с10на9. Поэтому я не уверен, почему вы ожидаете, что это будет напечатано дважды.