Java. Массивы. Часть 2. Двумерные и многомерные массивы

Двумерные и многомерные массивы




1. Какие массивы называются двумерными и многомерными?

Общие понятия о массивах и использование одномерных массивов подробно описаны здесь.

Массив считается двумерным, если для определения местоположения элемента в массиве нужно указать значения двух индексов. Двумерный массив ассоциируется с таблицей. Если количество столбцов и строк массива (таблицы) одинаковое, то массив еще называют матрицей.

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

2. Пример описания и использования двумерных массивов в программе.
// матрица целых чисел размером 3*4
int Matr[][];
Matr = new int[3][4];

// заполнение ячеек матрицы
Matr[0][2] = 23;
Matr[0][0] = -220;
Matr[2][3] = 380;

// матрица вещественных чисел размером 2*3
float[][] MatrF = new float[2][3];

MatrF[0][2] = 9.88f;
MatrF[0][0] = -33.8329f;

3. Пример описания двумерного массива альтернативными вариантами

В Java двумерный массив можно описывать разными способами. В данном примере показаны разные варианты описания двумерного массива целых чисел размером 2×3.

Вариант 1.

// объявление матрицы размером 2*3
int[] Matr[] = new int[2][3];

Вариант 2.

int[][] Matr = new int[2][3];

Вариант 3.

int[][] Matr = new int[2][3];

Вариант 4.

int[][] Matr;
Matr = new int[2][3];

Вариант 5.

int[] Matr[];
Matr = new int[2][3];

Вариант 6.

int Matr[][];
Matr = new int[2][3];

Вариант 7.

int Matr[][] = new int[2][];
Matr[0] = new int[3];
Matr[1] = new int[3];

Вариант 8.

int[][] Matr = new int[2][];
Matr[0] = new int[3];
Matr[1] = new int[3];

Вариант 9.

int[] Matr[] = new int[2][];
Matr[0] = new int[3];
Matr[1] = new int[3];

4. Как осуществляется инициализация двумерного массива? Пример

Чтобы осуществить инициализацию двумерного массива нужно инициализатор каждого измерения взять в отдельный ряд фигурных скобок.

В следующем примере объявляется двумерный массив вещественных чисел с именем X. Размер массива 2×3.

// инициализация двумерного массива размером 2*3
float X[][] = {
                  { 0.1f, 0.3f, 1.2f },
                  { 1.3f, 2.8f, 3.2f }
              };

5. Пример объявления двумерного массива, с разным числом элементов в одной строке (разной размерностью второго измерения).

В данном примере объявляется двумерный массив, в котором число элементов в каждой строке есть разным. Затем этот массив заполняется значениями как показано на рисунке.

Рисунок. Массив, в соответствии с условием задачи

// объявление массива, в котором
// 3 строки с разной размерностью второго измерения
long M[][] = new long[3][];

M[0] = new long[2]; // 2 элемента в нулевой строке
M[1] = new long[4]; // 4 элемента в первой строке
M[2] = new long[3]; // 3 элемента во второй строке

M[0][0] = 10l;
M[0][1] = 350l;

M[1][0] = 25l;
M[1][1] = 45l;
M[1][2] = 85l;
M[1][3] = 1200l;

M[2][0] = 55l;
M[2][1] = 450l;
M[2][2] = 2500l;

6. Пример объявления многомерных массивов

Многомерные массивы используют 3 и больше индексов для доступа к элементам массива.

// объявление массива размером 3*2*4
int M[][][] = new int[3][2][4];

// использование массива
M[1][1][2] = 23;
M[0][0][1] = -12;

// объявление массива размером 5*10*15
double[][][] D;
D = new double[5][10][15];
D[3][7][11] = -29.33;

7. Пример инициализации многомерного массива

В данном примере инициализируется массив размером 1×2×3.

// инициализация массива размером 1*2*3
byte B[][][] = {
                   {
                       { 0, 1, 2 },
                       { 1, 2, 3 },
                       { 3, 4, 5 }
                   },
                   {
                       { 1, 2, 3 },
                       { 2, 3, 4 },
                       { 5, 6, 7 }
                   }
};

8. Пример обнуления двумерной матрицы вещественных чисел размером 5×5
// обнулить матрицу размером 5*5
double Matrix[][] = new double[5][5];

for (int i=0; i<5; i++)
    for (int j=0; j<Matrix[i].length; j++)
        Matrix[i][j]=0.0;

9. Пример поиска заданного элемента в матрицы целых чисел размером 10×10
// поиск элемента в матрице
short Matrix[][] = new short[10][10];
boolean f_is;
short num; // искомый элемент

// ввод значения num
// ...

f_is = false; // сначала принимаем, что элемента в матрице нет

for (int i=0; i<10; i++)
    for (int j=0; j<Matrix[i].length; j++)
        if (Matrix[i][j]==num)
            f_is = true; // элемент найден

10. Пример поиска максимального значения в матрице вещественных чисел
// поиск максимума в матрице
float Matrix[][] = new float[10][10];
float max; // искомое максимальное значение

// ...

max = Matrix[0][0]; // принять, что max - один из элементов матрицы

for (int i=0; i<10; i++)
    for (int j=0; j<Matrix[i].length; j++)
        if (Matrix[i][j]>max)
            max = Matrix[i][j];

11. Пример вычисления суммы элементов двумерной матрицы вещественных чисел
// сумма элементов матрицы
float Matrix[][] = new float[10][10];
float sum; // искомая сумма

// ...

sum = 0;

for (int i=0; i<10; i++)
    for (int j=0; j<Matrix[i].length; j++)
        sum = sum + Matrix[i][j];

12.  Пример объявления и использования двумерного массива строк

В языке Java для работы с строками введен специальный класс String. В данном примере приведены разные варианты объявления, инициализации и использования двумерного массива строк.

// объявление двумерного массива строк
String M1[][] = new String[5][5]; // создание переменной типа массив

// запись информации в массив строк
for (int i=0; i<5; i++)
    for (int j=0; j<M1[i].length; j++)
        M1[i][j] = "Item #" + i + j;

// глубокое копирование массивов с помощью метода clone()
String M2[][] = M1.clone(); // массивы M1 и M2 указывают на разные участки памяти

// объявление и инициализация массива строк размером 3*3
String M3[][] = {
                    { "Item-00", "Item-01", "Item-02" },
                    { "Item-10", "Item-11", "Item-12" },
                    { "Item-20", "Item-21", "Item-22" }
                };

// поверхностное копирование
String M4[][]; // описание переменной типа двумерный массив строк
M4 = M1; // массивы M1 и M4 указывают на один и тот же участок памяти

// изменение в массиве M1 приведет к изменению в массиве M4 и наоборот
M1[1][4] = "1111"; // M4[1][4] = "1111"
M4[1][4] = "2222"; // M1[1][4] = "2222"

13. Пример объявления и использования двумерного массива классов

В данном примере объявлен двумерный массив классов размером 3×4. Процесс объявления переменной проходит в несколько этапов:

  • объявить переменную типа двумерный массив класса MyPoint;
  • выделить память под общую ссылку на классы размером 3×4;
  • выделить память под каждый элемент массива, который есть классом.
// объявление переменной mp типа двумерный массив
MyPoint[][] mp;

// выделение памяти для массива классов размером 3*4
mp = new MyPoint[3][4];

// выделение памяти для каждого элемента массива (класса)
for (int i=0; i<3; i++)
    for (int j=0; j<mp[i].length; j++)
        mp[i][j] = new MyPoint();

// использование массива в программе
for (int i=0; i<3; i++)
    for (int j=0; j<mp[i].length; j++)
        mp[i][j].SetXY(i, j);

int d;

d = mp[2][2].GetY(); // d = 2
d = mp[1][2].GetX(); // d = 1


Связанные темы