Является ли i-​- особенным в цикле while?

Я работал над циклом 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 на 9. Поэтому я не уверен, почему вы ожидаете, что это будет напечатано дважды.

0x5453 17.04.2019 16:10

Я думаю, что отладчик был бы вашим лучшим другом для этого.

Connor 17.04.2019 16:10

Цикл входит, i есть 10. Он печатает i, поэтому 10. Далее оно уменьшается i на 1, так что 9. Следующая итерация цикла, печать i, поэтому 9. Не знаю, почему вы ожидали, что 10 придет дважды.

Zabuzard 17.04.2019 16:11
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
106
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

То, что вы сказали, неверно, когда вы входите в цикл while, это уже первая итерация, поэтому первое напечатанное значение равно 10. Затем вы уменьшаете значение, чтобы второе было равно 9.

Но почему? Сначала мы видим печатную команду, а затем мы видим уменьшение i--, которое говорит: «Сначала примите за 10, затем уменьшите до 9». Этот порядок не имеет значения?

Davy Jones 17.04.2019 16:15

@DavyJones Действительно, этот порядок не имеет значения. Это было бы, если бы вы добавили шаги между первым и потом, что вы могли бы. Но нет, так что неважно, что есть первое и потом. И то, и другое происходит, и вы остаетесь с результатом этого.

kumesana 17.04.2019 16:17

@DavyJones, как они сказали :) Вы печатаете (так что вы видите 10), затем вы уменьшаете (значение уменьшилось до 9), затем вы снова печатаете на второй итерации (вы видите 9), затем вы уменьшаете ... и так далее. ..

burm87 17.04.2019 16:19

Отредактировано. Я неправильно написал. Мне жаль. Не могли бы вы проверить это еще раз, пожалуйста?

Davy Jones 17.04.2019 16:19

@DavyJones, это точно так же, единственная разница, как сказал GhostCat, будет заключаться в том, будете ли вы использовать --i или i-- внутри System.out.println

burm87 17.04.2019 16:22
Ответ принят как подходящий

Заблуждение с вашей стороны: эти операции до и после исправления влияют только на «текущее» выражение. Например, у них есть понятие нет некоторого вмещающего контекста цикла. Вы предполагаете, что --i каким-то волшебным образом влияет на условие while. Это не так. См. здесь для дальнейшего чтения.

Ваш код идет:

  1. я = 10
  2. я > 10 ... уверен: войдите в цикл
  3. напечатать я
  4. я = я -1
  5. перейти 2

Другими словами: если вы хотите увидеть различия в выводе на печать, измените свой код следующим образом:

System.out.println(--i);
System.out.println(i--);

Например.

В вашем коде есть эта операция на своей линии. Следовательно, эта строка может быть записана как i--, --i, i = i -1 или i -= 1. Не имеет значения. Выражение уменьшает i и сохраняет новое значение. Опять же: чтобы увидеть другой результат, вам нужно напрямую использовать результат этой операции!

Другие вопросы по теме