2015-03-16 2 views
0

Я не могу понять, как следующий фрагмент кода печатает 13 в качестве вывода. Насколько я вижу, условие while должно продолжать цикл, так как в этом случае i всегда меньше 10. Я попробовал отладки, но не мог понять. Может кто-нибудь объяснить?Управляющий поток для цикла while с добавлением постов

public class WhileCondition2 
{ 
    public static void main(String... args) 
    { 
     int i = 10; 
     while (i++ <= 10) 
     { 
      i++; 
     } 
     System.out.print(i); 
    } 
} 
+0

Благодарим вас за внимание – kittu

ответ

5

Вы используете пост инкремента

while (i++ <= 10) { // i will be incremented after evaluating i and do comparaison with 10 
     i++; 
} 

Вы можете использовать pre приращение вместо приращения приращения

while (++i <= 10) { // i will be incremented before comparaison 
     i++; 
} 

И значение i будет 11.

+0

Спасибо за то, что вы поняли, объяснив пример pre и post increment – kittu

+0

. Добро пожаловать :) –

+0

Но это не ответ, почему вы закончили в 13. Это одна из причин. Не имеет значения, вот как это работает. –

13

Первая итерация:

while (i++ <= 10) { // i++ returns 10, so condition is true, i becomes 11 
     i++; // i becomes 12 
    } 

Вторая итерация:

while (i++ <= 10) // i++ returns 12, so condition is false, i becomes 13 

Поэтому окончательное значение i составляет 13.

+2

Стоит отметить, что 'while (++ i <= 10)' может быть выполнено и будет выводить 11, поскольку приращение выполняется перед проверкой. –

1

Вы приращением я когда-то в заявлении в то время как и один раз в самом цикле, вы должны сделать то или другое.

2

После i становится равным 10, он увеличивается один раз после проверки и i становится 11. Тогда приращение в корпусе цикла происходит i = 12. Наконец, условие проверяется где i = 12 и, как и ожидалось, оказывается ложным. Но приращение в разделе состояния произойдет, тем не менее. Вот почему он печатает 13.

2
  1. Вы устанавливаете i в 10 будет выводить 10
  2. ваш цикл while i меньше или равна 10
  3. Вы прибавка после i++ это означает, что условия i <= 10 сначала осмотрены, а затем приращение делается вывод 11
  4. он затем входит в цикл, потому что i был 10 при запуске цикла и теперь 11, а затем получить подведет к 12, напечатает 12
  5. петля снова идет в корпус. i = 12 который более 10, концы петли, но ваш i++ все еще сделано после того, как условие не удалось, i теперь
0

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

о том, значение I равно 10.

, когда он входит в цикл while i ++ < = 10 является истинным как i == 10 и входит в цикл, но до того, как он входит в цикл, i увеличивается на 11 из-за оператора post increment.

После этого в цикле i снова увеличивается на 12 с оператором приращения, который находится в цикле.

Затем я снова тестируют в то время как (я ++ < = 10) и является ложным, как я это 12. но прежде, чем она выходит из цикла он снова увеличивается на пост приращения оператора, что делает его 13.

, и это то, что выводится в окно консоли java,

Вещь, о которой нужно помнить, даже если условие цикла while ложно, оно все равно увеличит значение i.

Надеюсь, это поможет.

Смежные вопросы