2016-09-23 2 views
1
public class YourClassNameHere { 
     public static void main(String[] args) { 
      int i = 1; 
      do 
      while(i++ <= 2); 
      while(i++ <= 4); 
      System.out.println(i); 

     } 
    } 

Как работают циклы и пост-инкремент в этой программе.Как этот фрагмент дает результат как 7?

+4

Получить карандаш и бумагу, работать через вручную. –

+1

используйте отладчик, и вы увидите – Jens

+2

Первый намек: разверните каждую петлю, чтобы иметь тело с фигурными скобками, а затем вы можете добавить каротаж в теле ... –

ответ

4

Посмотрите, как это работает в замкнутом цикле.

int i = 1; 
     do { 
     System.out.println("start"+i); 
     while(i++ <= 2)System.out.println("inner while loop "+i); 
     } 
     while(i++ <= 4)System.out.println("outer while loop"+i); 
     System.out.println("final ans"+i); 
+0

Когда я получаю приращение до 4, то оба условия while получат false, поэтому он должен печатать i = 5, но not.How я получаю приращение до 6 и 7. –

+0

, когда i значение переменной = 4 из-за <= 4, тогда сделайте while loop условие получает истинный n post increment call (i ++) mins i = 5, тогда while (i ++ <= 2) условие get false и post increment i ++ вызывает mins i = 6, а затем делает, пока условие цикла получает false, а post min min i = 7 , вот почему он выдает 7. – halim

2

Как сказал халим, у вас есть вложенная петля. Поместите в код еще несколько System.out.println и посмотрите на результат.

Пример:

int i = 1;  
do 
{ 
    System.out.println("i = " + i + " on position: outer loop start"); 
    while (i++ <= 2) 
    { 
     System.out.println("i = " + i + " on position: inner while loop");   
    } 
    System.out.println("i = " + i + " on position: outer while loop"); 
    } while (i++ <= 4); 

    System.out.println("i = " + i + " on position: final result"); 

После вы видите результат вы увидите, как «я» переменная прибавка от 1 до 7, а на позиции ведьма это происходит. Вы должны знать, что в условии i ++ < = 2, если вход «i» равен 2, первое будет 2 < = 2 (true), после чего «i» получит значение приращения 3. В следующем проходе вы проверите 3 < = 4 (false), но поскольку у вас есть i ++, он все равно получит свое значение приращения 4. Запустите вышеуказанный код и посмотрите, где именно происходит инкремент.

1

Чтобы просто положить, вы не используете достаточное количество скобок. Я предлагаю использовать скобки во всех файлах «все», «и» и т. Д., Иначе вы можете получить неожиданный результат (например, здесь?). Есть ли какой-то конкретный результат, который вы хотите увидеть, или просто почему в этом случае вы получаете 7?

Независимо от ответа, решение Халима является то, что я говорю:

do { 
while (i++ <= 2); 
} 
// remaining code in here 
Смежные вопросы