2015-06-29 6 views
-2

Я вроде как не получаю вложенные циклы, может кто-нибудь объяснить мне, почему следующий код выполняется 45 раз? должен ли i ++ и j ++ приращение на 1? поэтому первый цикл должен быть (0 * 0), (1 * 1), (2 * 2) и т. д.сколько раз выполняется инструкция println

for(int i = 0; i < 10; i++) 
     for(int j = 0; j < i; j++) 
      System.out.println(i * j); 
+5

Вы пробовали запустить цикл самостоятельно с ручкой и бумагой? Используйте таблицу для отслеживания значений для 'i' и' j'. – CubeJockey

+0

Или используйте точку останова и отлаживайте, если вы не хотите расточительствовать бумагу ... – Codebender

+2

@Abishek ясно, что это тот, кто выиграет от ручного и бумажного подхода. – CubeJockey

ответ

1

внешний контур работает i раз в соответствии со значением i

1 значения я это 0 последняя i значение 9 потому i<10.

так внутренний контур петли 9*10/2 который 45

Время цикла = 0+1+2+.....+8+9 = 9*10/2 = 45

примечание. я использовал это уравнение для расчета суммы времен цикла

1 + 2 + 3 + ... + N = N(N+1)/2 
1

Это не так, как вложенные циклы работы, его, как это -

  1. Сначала мы вводим внешний контур, то мы выполняем внутренний цикл, пока внутренние выходы цикла (то есть значение j становится равным i), и только после этого мы снова увеличиваем i.

Так, например, если i 5, было бы ввести внешнюю петлю, а затем j бы начать с 0 до 4 (как я 5) и значения, рассчитанные будет (5*0) , (5*1) , (5*2) , (5*3) , (5*4), а после выхода из внутренняя петля, он снова увеличит i на 1, i, тогда станет 6, а затем это повторится (то есть j начнется с 0 до 5).

1

Вместо того, чтобы распечатывать выражение i * j, распечатайте значения i и j, чтобы вы могли проследить и посмотреть, что происходит в цикле. Продукт i * j действительно бессмыслен, чтобы понять, сколько раз он зацикливается.

for(int i = 0; i < 10; i++) 
    for(int j = 0; j < i; j++) 
     System.out.println("i " + i + "j " + j); 
1

Я чувствую, что у вас есть проблема в понимании объема переменных. Я вновь пишу код для лучшего понимания:

for(int i = 0; i < 10; i++){ 
     for(int j = 0; j < i; j++){ 
      System.out.println(i * j); 
     } //end of scope of variable j 
}// end of scope of variable i 

Вы, скорее всего, ошибочно, что в конце второго цикла, когда i сохраняет значение 1 переменной j следует хранить значение 1. Но что это не так. Переменная j повторно инициализируется со значением 0. Таким образом, когда i достигает значения 2 в 3-м цикле внутренний цикл выполняется 2 раза для значения j как 0 и 1. и так далее и тому подобное

1

Поскольку другие ответы уже объясняют петли, я этого не сделаю. Но если вы сделаете свой код более информативным, вы можете более легко увидеть, что происходит.

public static void main(final String[] args)  
    { 
     int counter = 0; 
     for (int i = 0; i < 10; i++) 
     { 
      System.out.println("outerloop: i = " + i); 
      System.out.println("___________________________"); 
      for (int j = 0; j < i; j++) 
      { 
       System.out.println("innerloop: i = " + i + " & j = " + j); 
       System.out.println("Counter: " + counter + " calculation: " + i + " * " + j + " = " + (i * j)); 
       counter++; 
      } 
      System.out.println("___________________________"); 
     } 
    } 

Вот как я это сделал в школе, чтобы понять, что делает код.

1
int iCount=1; 
     System.out.println("Outer for loop will begin and run for 10 times"); 
     for (int i = 0; i < 10; i++) { 
      System.out.println(" Inner for loop will begin and run for " + i + " time(s)"); 
      for (int j = 0; j < i; j++) { 
       System.out.println("  (" + iCount + ") Inner for loop running....." + (i * j)); 
       iCount++; 
      } 
     } 
     System.out.println("Outer for loop ends"); 

Выход: -

Outer for loop will begin and run for 10 times 
    Inner for loop will begin and run for 0 time(s) 
    Inner for loop will begin and run for 1 time(s) 
     (1) Inner for loop running.....0 
    Inner for loop will begin and run for 2 time(s) 
     (2) Inner for loop running.....0 
     (3) Inner for loop running.....2 
    Inner for loop will begin and run for 3 time(s) 
     (4) Inner for loop running.....0 
     (5) Inner for loop running.....3 
     (6) Inner for loop running.....6 
    Inner for loop will begin and run for 4 time(s) 
     (7) Inner for loop running.....0 
     (8) Inner for loop running.....4 
     (9) Inner for loop running.....8 
     (10) Inner for loop running.....12 
    Inner for loop will begin and run for 5 time(s) 
     (11) Inner for loop running.....0 
     (12) Inner for loop running.....5 
     (13) Inner for loop running.....10 
     (14) Inner for loop running.....15 
     (15) Inner for loop running.....20 
    Inner for loop will begin and run for 6 time(s) 
     (16) Inner for loop running.....0 
     (17) Inner for loop running.....6 
     (18) Inner for loop running.....12 
     (19) Inner for loop running.....18 
     (20) Inner for loop running.....24 
     (21) Inner for loop running.....30 
    Inner for loop will begin and run for 7 time(s) 
     (22) Inner for loop running.....0 
     (23) Inner for loop running.....7 
     (24) Inner for loop running.....14 
     (25) Inner for loop running.....21 
     (26) Inner for loop running.....28 
     (27) Inner for loop running.....35 
     (28) Inner for loop running.....42 
    Inner for loop will begin and run for 8 time(s) 
     (29) Inner for loop running.....0 
     (30) Inner for loop running.....8 
     (31) Inner for loop running.....16 
     (32) Inner for loop running.....24 
     (33) Inner for loop running.....32 
     (34) Inner for loop running.....40 
     (35) Inner for loop running.....48 
     (36) Inner for loop running.....56 
    Inner for loop will begin and run for 9 time(s) 
     (37) Inner for loop running.....0 
     (38) Inner for loop running.....9 
     (39) Inner for loop running.....18 
     (40) Inner for loop running.....27 
     (41) Inner for loop running.....36 
     (42) Inner for loop running.....45 
     (43) Inner for loop running.....54 
     (44) Inner for loop running.....63 
     (45) Inner for loop running.....72 
Outer for loop ends 
Смежные вопросы