2016-12-11 7 views
-3

Сумма составляет -9, но мне трудно понять, почему. Я не понимаю, как j- в цикле for будет увеличиваться. Он должен быть увеличен после того, как тело будет выполнено, правильно? Но разве инициализация цикла for не делает j-бессмысленным? Поэтому я предполагаю, что на 2-й итерации j становится 2 из-за i ++. Может ли кто-нибудь помочь взглянуть на это правильно?Как увеличить цикл цикла?

public static void whatsTheSum(){ 
    int sum = 1; 
    int i = 1; 

    while(i < 5){ 
     for(int j = i; j > 0; j--) 
      sum += (j - i); 
     i++; 
    } 
    System.out.println(sum); 
} 
+2

Пытались ли вы отладчик? Мы можем сказать вам, правильно ли вы заявляете, но вы можете помочь себе лучше, чем мы можем, исследуя/проверяя вашу собственную теорию (с отладкой). – n247s

+0

'j -' => 'j = j-1' просто для расширения и да обновляется после каждой итерации, если условие выполнено – nullpointer

ответ

3

Я не понимаю, как j-- в течение цикла будет увеличиваться. Он должен быть увеличен после того, как тело будет выполнено, правильно?

Это обновленный, то, да. (Обновление - это декремент, а не инкремент.) Но да, это происходит после каждого запуска цикла.

Но не инициализация петли для петли делает j-- бессмысленным?

No. Инициализация имеет j начало со значением от i, а затем отсчет в то время как это j> 0 (без изменения i).

Так я предполагаю, что на 2-й итерации j становится 2 из i++.

Вторая итерация while петли, да. j начнется в 2, а затем цикл for будет работать дважды (для j = 2 и j = 1).

Просто для полной ясности, вот как работает for петля:

for (initialization; test; update) { 
    body; 
} 

Это запустился в таком порядке:

  1. ли initialization
  2. Оценка test, если ложно оставить петлю
  3. Do body
  4. ли update
  5. Перейти к операции 2
0

Так что, если у вас есть вложенные циклы его всегда хорошо, чтобы записать каждую итерацию:

i = 1, sum = 1 
1. while (i < 5) = true so 
1.1 for(int j = 1; j > 0; j--) j=1 
    sum += (1-1) 

i=2 sum =1 
2. while (i < 5) = true so 
2.1 for(int j = 2; j > 0; j--) 
    sum += (2-2) --> sum = 1 
2.2 for(int j = 1; j > 0; j--) 
    sum += (1-2) --> sum = 0 

i=3 sum =0 
3. while (i < 5) = true so 
3.1 for(int j = 3; j > 0; j--) 
    sum += (3-3) --> sum = 0 
3.2 for(int j = 2; j > 0; j--) 
    sum += (2-3) --> sum = -1 
3.3 for(int j = 1; j > 0; j--) 
    sum += (1-3) --> sum = -3 

И так далее

0

К чему я понять требование, указанное в вопросе выше, чтобы увеличить j для повторения с 0 to i, вам потребуется что-то вроде:

while(i < 5){ 
    for(int j = 0; j < i; j++) { 
     sum += (j - i); 
    } 
    i++; 
} 

j++ также могут быть заменены j=j+1, j += 1 они будут иметь EHT esame эффект и порядок очень хорошо объясняется @T.J's answer.

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