по каждому индексу начинается с нуля. Размер массива зависит от того, о каком массиве идет речь – внешнем или вложенном. Размер по первому индексу означает количество вложенных массивов (количество строк):
int x = coord. length; // x = 10
Размер по второму индексу означает количество элементов вложенного массива (количество столбцов):
int y = coord [0].length; // y = 15
Поскольку при создании классического двумерного массива (а не коллекции) все вложенные массивы имеют одинаковый размер, то первый индекс не имеет особого значения. Важно лишь, чтобы он находился в переделах размерности по количеству вложенных массивов.
5.2.1 Инициализация двумерного массива
Двумерный массив можно инициализировать при создании, перечислив значения в явном виде в конструкции из фигурных скобок:
int [] [] nums = {{4,9,12,0}, {2,7,3,5}};
Для инициализации массива упорядоченными данными используются вложенные циклы. Сейчас вы уже готовы написать программу инициализации двумерного цикла самостоятельно. Один из возможных вариантов программы приведен в листинге 5.2.
Листинг 5.2 Инициализация двумерного массива
public class Listing5_2 {
public static void main (String [] args) {
// Объявление двумерного массива 10x15
int [] [] coord = new int [10] [15];
// Перебор элементов внешнего массива
for (int i=0;i <coord. length; i++) {
// Перебор элементов вложенного массива
for (int j=0;j <coord [0].length; j++) {
// Пример выражения для генерации значений
coord [i] [j] = (i+j) *j;
}
}
// Вывод сформированных значений на печать
for (int [] tmp1:coord) {
for (int tmp2:tmp1) {
System.out.print (tmp2+"\t»);
}
System.out.print (»\n»);
}
}
}
Разберем подробнее этот пример. После того, как объявлен двумерный массив с размерностью 10х15, мы организуем вложенный цикл для заполнения ячеек массива некими автоматически сгенерированными данными.
В качестве граничного параметра цикла используем запрос длины массива, например:
for (int i=0;i <coord. length; i++) {
Как вы помните, индексация начинается с нуля, и максимальный индекс на единицу меньше, чем размер массива. Именно поэтому в цикле используется условие «меньше», а не «меньше или равно». В данном случае размер внешнего массива равен 10, а индексы принимают значения от 0 до 9. Аналогично происходит перебор элементов массива по второму индексу при помощи вложенного цикла.
Для генерации значений использовано произвольное выражение:
coord [i] [j] = (i+j) *j;
Вместо него можно подставить любое другое выражение или источник данных. Важно лишь, чтобы тип данных, возвращаемых выражением, совпадал с типом данных массива.
Сформировав данные, мы выводим их на печать для проверки. Для перебора значений используем сокращенную форму оператора for. В случае с двумерным массивом есть некоторые тонкости. Обратите внимание на типы переменных цикла в объявлении внешнего и внутреннего цикла:
for (int []