Курс

"Программирование Java"

Многомерные массивы

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

Поскольку массив двумерный, он представляет собой простую таблицу. Его также можно было создать следующим образом: int[][] array  = new int[2][3];. Количество квадратных скобок указывает на размерность массива. А числа в скобках - на количество строк и столбцов. И также, используя индексы, мы можем использовать элементы массива в программе:

// установим элемент первого столбца второй строки
array[1][0]=44;
System.out.println(array[1][0]);

Объявление трехмерного массива могло бы выглядеть так:

int[][][] nums3 = new int[2][3][4];

Визуально трехмерный массив можно представить, как систему координат, содержащею оси: абсцисс, ординат и аппликат

Зубчатый массив

Многомерные массивы могут быть также представлены как «зубчатые массивы» или «неровные массивы». На рисунке выше двумерный массив имел 6 строк и 6 столбцов, поэтому у нас получалась ровная таблица. Но мы можем каждому элементу в двухмерном массиве присвоить отдельный массив с различным количеством элементов:

int[][] nums = new int[3][];
nums[0] = new int[2];
nums[1] = new int[3];
nums[2] = new int[5];

foreach

Специальная версия цикла for предназначена для перебора элементов в наборах элементов, например, в массивах и коллекциях. Она аналогична действию цикла foreach , который имеется в других языках программирования. Формальное объявление:

for (тип_данных название_переменной : контейнер){

    // тело цикла

}

Например:

int[] array = new int[] { 1, 2, 3, 4, 5 };
for (int i : array){
    System.out.println(i);
}

Особенность этой реализации в том, что элементы массива поочередно копируются в контейнер i. Поэтому изменение значения переменной i в теле цикла не изменит значений, хранящихся в массиве. Для изменения значений внутри массива, используется цикл с параметром for

Перебор многомерных массивов в цикле

int[][] array  = new int[][]
        {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };
for (int i = 0; i < array.length; i++){
    for(int j=0; j < array[i].length; j++){
        System.out.print(array[i][j] + "\t");
    }
    System.out.println();
}

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

Приложение

Пример 1:

import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args) {

 

        /*int[][] array = {{6, 0, 1},

                        {7, 4, 2}};

 

        System.out.println( array[1][2] );*/

 

        Scanner in = new Scanner(System.in);

 

        //Вводим n - кол-во строк и m - кол-во столбцов двумерного массива

        int n = in.nextInt(), m = in.nextInt();

 

        //Создаем двумерный массив n на m (NxM)

        int[][] a = new int[n][m];

 

        //Заполнение массива с клавиатуры

        //Внешний цикл для передвижения по строкам

        for (int i = 0; i < n; i++) {

            //Внутренний цикл для движения по столбцам внутри строк

            for (int j = 0; j < m; j++) {

                //Чтение каждой клетки мссива с клавиатуры

                a[i][j] = in.nextInt();

            }

        }

 

        //Вывод на экран эл-тов двумерного массива в табличном виде

        //Внешний цикл для передвижения по строкам

        for (int i = 0; i < n; i++) {

            //Внутренний цикл для движения по столбцам внутри строк

            for (int j = 0; j < m; j++) {

                //Вывод каждого эл-та строки через символ табуляции

                System.out.print( a[i][j] + "\t");

            }

            //После того как выведена строка, переход на следующую

            System.out.println();

        }

 

 

    }

 

}

 

Пример 2:

import java.util.Scanner;

 

public class Main {

 

    public static void main(String[] args) {

 

        Scanner scanner = new Scanner(System.in);

 

        int n = scanner.nextInt();

 

        int[][] array = new int[n][n];

 

        for (int i = 0; i < n; i++) {

            for (int j = 0; j < n ; j++) {

                if (j == n - 1 - i){

                    array[i][j] = 1;

                }

                if ( j < n - 1 - i){

                    array[i][j] = 0;

                }

                if ( j > n - 1 - i){

                    array[i][j] = 2;

                }

            }

        }

 

        for (int i = 0; i < n; i++) {

            for (int j = 0; j < n; j++) {

                System.out.print( array[i][j] + " ");

            }

            System.out.println();

        }

 

    }

 

}

Полезный код