Anil Pillai Ответов: 3

Пожалуйста объясните что происходит внутри for loop


TwoDArray класс { общественная статический недействительным основные(string аргументы[])
{ int twoD[][]= new int[4][5]; int i, j, k = 0;
для(i=0; i<4; i++)
для(j=0; j<5; j++)
{ twoD[i][j] = k; k++;
}
для(i=0; i<4; i++)
{ for(j=0; j<5; j++)
System.out.print(twoD[i][j] + " "); System.out.println(); }
}
}

Что я уже пробовал:

Я понимал, какой результат я получаю, но я не знаю, как я его получаю. пожалуйста, дайте мне знать, что происходит внутри for loop.

3 Ответов

Рейтинг:
24

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 принадлежит только внешнему контуру, а не внутреннему.


Anil Pillai

Спасибо братан

Рейтинг:
2

OriginalGriff

Начните с отступа вашего кода, чтобы он был читабельным:

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(); 
            }
        }
    }
Теперь вы можете видеть, что происходит: у вас есть два вложенных цикла, Один из которых индексирует i через все строки, и внутренний, который индексирует j через все колонки.
Внутри внутреннего цикла вы устанавливаете каждой ячейке массива число из увеличивающейся последовательности. Поскольку внутренний цикл работает со всеми столбцами в строке, каждый столбец получает значение на единицу больше, чем его предшественник, а затем вы переходите к следующей строке и продолжаете работу с ее столбцами.


Anil Pillai

хорошо, я понял, но не могли бы вы сказать мне, как там работает к. что именно делает этот код 'twod[i][j]=k' ?

OriginalGriff

Это задание. Левая сторона знака равенства-это место назначения, правая - источник. Значение в источнике копируется в место назначения.
В этом случае конечным пунктом является элемент массива: Ваш массив называется twoD, и ему требуются два индекса: "индекс строки" и "индекс столбца", точно так же, как листу графической бумаги нужны координаты X и Y, чтобы указать конкретную "коробку" на листе. "i" и "j" обеспечивают эти индексы.

Честно говоря, если вы не понимаете этот код, вам нужно вернуться прямо к началу вашего курса и перечитать все свои заметки- это очень простой материал!

Anil Pillai

Спасибо

Рейтинг:
0

Patrice T

Если вы не понимаете, что делает какой-то код, используйте отладчик, он покажет вам.

Существует инструмент, который позволяет вам видеть, что делает ваш код, его имя отладчик Это также отличный инструмент обучения, потому что он показывает вам реальность, и вы можете увидеть, какие ожидания соответствуют реальности.
Когда вы не понимаете, что делает ваш код или почему он делает то, что он делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.

Цитата:
что именно делает этот код 'twod[i][j]=k' ?

Как и для любого языка, вам нужно изучить основы.


Anil Pillai

Спасибо