Thomas Daniels
Во-первых, вот код в немного более "читаемом" формате, что делает его немного легче интерпретировать:
class TwoDArray {
public static void main(String args[]) {
int twoD[][] = new int[4][5];
int i, j, k = 0;
for (i = 0; i < 4; i++)
for (j = 0; j < 5; j++) {
twoD[i][j] = k;
k++;
}
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++)
System.out.print(twoD[i][j] + " ");
System.out.println();
}
}
}
У вас их четыре
for
петли полностью (две внешние для петель с каждой внутренней для петли).
for (i = 0; i < 4; i++)
for (j = 0; j < 5; j++) {
twoD[i][j] = k;
k++;
}
Выше приведен первый внешний контур. Код, запущенный во внешнем цикле, не обернут внутри него
{ }
таким образом, это означает, что в цикле будет выполняться только следующий оператор, а здесь этот оператор является еще одним циклом! Итак, у вас есть
вложенный цикл[
^], петля в петле. Когда ваш цикл выполняется, это то, что произойдет с переменными
i
,
j
и
k
(
до k++
) в хронологическом порядке:
i = 0, j = 0, k = 0
i = 0, j = 1, k = 1
i = 0, j = 2, k = 2
i = 0, j = 3, k = 3
i = 0, j = 4, k = 4
i = 1, j = 0, k = 5
i = 1, j = 1, k = 6
i = 1, j = 2, k = 7
i = 1, j = 3, k = 8
i = 1, j = 4, k = 9
i = 2, j = 0, k = 10
- .. и так далее. Как вы можете видеть, для каждого
i
, весь цикл для j
бежит.
Затем вторая внешняя петля:
for (i = 0; i < 4; i++) {
for (j = 0; j < 5; j++)
System.out.print(twoD[i][j] + " ");
System.out.println();
}
Та же идея: это вложенный цикл. Но здесь внутренний цикл не имеет скобок для указания блока для "содержимого" цикла, поэтому только следующий оператор принадлежит циклу, который является
print
заявление - то
println
принадлежит только внешнему контуру, а не внутреннему.