Двумерные массивы
На прошлом занятии мы рассмотрели одномерные массивы. Представление одномерного массива - строка, содержащая в себе данные, перечисленные через запятую. На практике этого недостаточно. Необходимо иметь и другие, более сложные представления. Например обычная таблица данных, состоящая из нескольких столбцов и строк должна иметь уже более сложное представления. Изображение же - это вообще таблица троек чисел (Один цвет задаётся 3 компонентами RGB). Тут нам на помощь приходят многомерные массивы. Многомерный массив - это массив, каждым элементом которого является массив.
Создаётся двумерный массив очень просто:
int n = 5;
int m = 6;
int[][] mas = new int[n][m];
Такой массив представляет из себя массив, в котором лежит 5 массивов, каждый из которых содержит 6 элементов типа int. Представление такого массива - таблица 5 х 6.
Заполнение массива
Для перебора двумерного массива необходимо запускать 2 цикла.
for (int i = 0; i<n; i++){
for (int j = 0; j<m; j++){
// здесь будет код
}}
Для избежания ошибок очень важно следить за верностью введения индексов: если задан массив размерами n х m, то первый индекс должен быть меньше, чем n, а второй меньше, чем m.
Заполняется массив в подобных циклах. Например код, который будет заполнять массив числами от 0 до n*m-1:
for (int i = 0; i<n; i++){
for (int j = 0; j<m; j++){
mas[i][j] = i*m + j;
}}
Обратите внимание, что теперь у массива 2 индекса - первый определяет индекс массива, который мы берём, а второй - индекс элемента в массиве.
Если нам необходимо заполнить двумерный массив введёнными числами, то можно воспользоваться следующим кодом:
for (int i = 0; i<n; i++){
for (int j = 0; j<m; j++){
mas[i][j] = sc.nextInt();
}}
Вывод двумерного массива на экран
Вывести на экран двумерный массив можно с помощью всё тех же двух циклов:
for (int i = 0; i<n; i++){
for (int j = 0; j<m; j++){
System.out.print(mas[i][j]+" ");
}
System.out.println();
}
С помощь команды System.out.print() мы выводим элементы массива, не переходя на следующую строку. В тоже время, каждый раз, когда внутренний цикл отрабатывает, мы делаем переход на следующую строку с помощью команды System.out.println().
Такими образом, создание, заполнение и вывод двумерного массива должны выглядеть примерно так:
class A {
public static void main(String[] args) {
// пример создания
int n = 5;
int m = 6;
int[][] mas = new int[n][m];
// пример заполнения
for (int i = 0; i<n; i++)
for (int j = 0; j<m; j++)
mas[i][j] = i*m + j;
//пример вывода
for (int i = 0; i<n; i++){
for (int j = 0; j<m; j++)
System.out.print(mas[i][j]+" ");
System.out.println();
}}}
"Зубчатые" массивы
К слову, многомерные массивы необязательно должны быть строго n x m. Все, кроме первой размерности могут быть произвольными.
import java.util.Scanner;
class A {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = 5;
int m = 6;
// пример заполнения
int[][] mas = new int[n][];
int[] mas0 = {1,3,4,5,3,6,7,246,35,62,56};
mas[0] = mas0;
mas[1] = new int[]{34, 4567, 344, 734, 6};
mas[2] = new int[]{1};
mas[3] = new int[]{34, 5, 42, 356, 4567, 344, 734, 6};
mas[4] = new int[]{34, 5};
//пример вывода
for (int i = 0; i<n; i++){
for (int j = 0; j<mas[i].length; j++) //length
System.out.print(mas[i][j]+" ");
System.out.println();
}}}
Обратите внимание на очень интересную функцию: length. Если у вас есть массив, длину которого необходимо узнать, то достаточно (для массива под названием mas) написать mas.length. Такая строчка вернёт вам длину массива.
Многомерные массивы
Помимо одномерных и двумерных массивов можно создавать массивы любой размерности, которая вам понадобится. Например, код для создания трёхмерного массива, хранящего, скажем, изображения будет выглядеть примерно так:
class A {
public static void main(String[] args) {
// пример создания
int n = 1080;
int m = 1920;
int p = 3;
int[][][] mas = new int[n][m][p];
// пример заполнения
for (int i = 0; i<n; i++)
for (int j = 0; j<m; j++)
for (int k = 0; k < p; k++)
mas[i][j][k] = 0;
//пример вывода
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
System.out.print("(");
for (int k = 0; k < p; k++)
System.out.print(mas[i][j][k] + " ");
System.out.println(")");
}
System.out.println();
}}}
Свои вопросы можете задать в телеграмм-канале
Курс по Java - разработке бесплатно(7 урок)
Курс по Java - разработке бесплатно(9 урок)