Масиви. Частина 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. Приклад ініціалізації багатовимірного масиву.

У даному прикладі ініціалізується масив розміром 2×3×3.

// ініціалізація масиву розміром 2*3*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


Зв’язані теми