Что такое двумерный массив?
Двумерный массив в Java — это массив массивов, то есть в каждой его ячейке находится ссылка на некий массив. Но гораздо проще его представить в виде таблицы, у которой есть количество строк (первое измерение) и количество столбцов (второе измерение). Двумерный массив, у которого все строки имеют равное количество элементов, называется прямоугольным.
Как уже говорилось, двумерный массив – это массив массивов, т.е. такой массив, элементами которого являются массивы. Можно считать, что двумерный массив mas[n][m] – это n последовательно расположенных одномерных массивов размерностью m.
Объявление, создание и инициализация двумерных массивов
Объявление и создание двумерного маcсива практически такая же, как и в случае одномерного:
1 |
int[][] twoDimArray = new int[3][4]; |
Этот массив имеет 3 строки и 4 столбца. Размер прямоугольного двумерного маcсива (они могут быть и не прямоугольными, об этом — чуть ниже), то есть общее количество элементов можно определить, перемножив количество строк на количество столбцов. Сейчас он проинициализирован (заполнен) значениями по умолчанию. То есть — нулями. Давайте заполним его нужными нам значениями.
“Длины” двумерного маcсива
Чтобы получить длину одномерного маcсива (то есть, количество элементов в нём) можно использовать переменную length
. То есть, если мы определим массив int a[] = {1,2,3}
, то операция a.length
возвращает 3. А что, если эту же процедуру применить к нашему двумерному массиву?
Как определить смещение элемента mas[i][j]? Надо пропусть i раз по m элементов + еще j элементов. Как узнать адрес начала массива? Его должно быть можно определить по имени массива. Тогда самый очевидный способ доступа к элементу двумерного массива с помощью указателей такой.
1 2 |
int [][] twoDimArray = {{5,7,3,17}, {7,0,1,12}, {8,1,2,3}}; System.out.println(twoDimArray.length); |
Доступ к элементам в двумерном массиве
Для доступа ко всем элементам двумерного массива требуется два цикла: один для строк и один для столбцов. Поскольку доступ к двумерным массивам обычно выполняется по строкам, то левый индекс используется в качестве внешнего цикла:
1 2 3 |
for (int row = 0; row < numRows; ++row) // доступ по строкам for (int col = 0; col < numCols; ++col) // доступ к каждому элементу в строке std::cout << array[row][col]; |
Вывод: когда в программе объявляется массив в виде int mas[2][3], то этим определяется не только выделение памяти для шести элементов маcсива, но еще и определяется массив указателей-констант из 2-х элементов mas[0] и mas[1], значениями которых являются адреса соответствующих строк массива, а также определяется указатель-константа с именем mas, значение которого равно адресу массива указателей-констант с адресами строк массива.