Если видео недоступно для просмотра, попробуйте выключить блокировщик рекламы.

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

int[][] matrix = {
      {1, 2},
      {3, 4}
};

public static int deepSum(int[][] ar) {
    int sum = 0;

    for (int i = 0; i < ar.length; i++) {
        for (int j = 0; j < ar.length; j++) {
            sum = sum + ar[i][j];
        }
    }

    return sum;
}  

System.out.println(deepSum(matrix)); // => 10      

Здесь важно обратить внимание на то, что для обхода разных массивов используются разные элементы, здесь i и j. В то время как в первом цикле i будет меняться только на единицу(i++), j во внутреннем цикле успеет пройти весь вложенный массив целиком. Также обратите внимание на то, что в этом примере j как и i меняется только до ar.length, но это длина внешнего массива, а не внутреннего, поэтому если мы захотим использовать подобную функцию для вложенных массивов разной длины, то нужно быть внимательнее:

int[][] matrix = {
      {1, 2, 4},
      {4, 5}
};

public static int deepSum(int[][] ar) {
    int sum = 0;

    for (int i = 0; i < ar.length; i++) {
        for (int j = 0; j < ar[i].length; j++) {
            sum = sum + ar[i][j];
        }
    }

    return sum;
}

System.out.println(deepSum(matrix)); // => 15        

Обратите внимание на выражение j < ar[i].length.

Самое сложное во вложенных циклах – не запутаться в том, как изменяются и используются индексы. Конечно, пример выше можно переписать используя for-each без индексов. Не всегда это возможно, но можно воспользоваться отладочной печатью. Например представим что мы сошли с ума и решили написать функцию, которая будет брать на вход массив строк и выбирать четные символы из каждой нечетной строки, и как настоящие сумасшедшие мы хотим порассуждать о корректности наших программ, поэтому будем выводить на экран все происходящее:

Обратите внимание что нас, как конечных пользователей не интересует что в массивах индексы начинаются с нуля, поэтому первый элемент массива будет нечетным. И также как строка превращается в массив с помощью соответствующего метода toCharArray(). Чуть позже мы разберем что с этим кодом не так и что может быть сделано по-другому.

Мы учим программированию с нуля до стажировки и работы. Попробуйте наш бесплатный курс «Введение в программирование» или полные программы обучения по Node, PHP, Python и Java.

Хекслет

Подробнее о том, почему наше обучение работает →