CodeGym /Kurslar /JAVA 25 SELF /İkiölçülü massivlər

İkiölçülü massivlər

JAVA 25 SELF
Səviyyə, Dərs
Mövcuddur

1. Giriş

Adi massivi uzun pizza qutusu kimi təsəvvür edin: bütün tikələr sıra ilə düzülüb — dadlıdır, amma yeknəsəqdir.

İndi isə iş cədvəlini və ya şahmat taxtasını təsəvvür edək. Orada hər şey sətirlər və sütunlar şəklində — yəni cədvəl kimi təşkil olunub. Bu, ikiölçülü massiv üçün klassik tapşırıqdır.

Həyatda ikiölçülü massivlər hər addımda qarşımıza çıxır:

  • İşçilərin maaş cədvəlləri (sətirlər — işçilər, sütunlar — aylar).
  • Ekrandakı şəkil (hər “xana” — pikselin rəngi, onun iki koordinatı var: X və Y).
  • Matris hesablamaları və məlumatların emalı.
  • Şahmat taxtası və ya X‑O oyunu üçün sahə.

Bəzən ikiölçülü massivə matris də deyilir (bu ad riyaziyyatdan gəlib).

Proqramçı kimi ikiölçülü massivin sizə lazım ola biləcəyi yerlər çoxdur. Demək olar ki, istənilən stolüstü oyunun reallaşdırılması hazır ikiölçülü massivdir: “Şahmat”, “Dama”, “X‑O”, “Dəniz döyüşü”:

İkiölçülü massivlər 2

“Şahmat”ın və ya “Dəniz döyüşü”nün oyun sahəsi ikiölçülü massivlərə mükəmməl oturur: xanaların koordinatları kimi yalnız rəqəmlərdən istifadə edirsiniz. “piyada e2 ⟶ e4” yox, “piyada (4,1) ⟶ (4,3)”. Proqramçı kimi bu hətta daha rahatdır.

2. İkiölçülü massivlərin elan sintaksisi

İlk elana qədər qorxuludur! Addım-addım baxaq.

Ümumi qayda


tip[][] imyaMassiva;
Javada ikiölçülü massiv elan etmək

Buradakı iki boş [] mötərizə — gecə boyu qəhvədən sonra kompilyatorun səhvi deyil, göstəricidir: massiv ikiölçülüdür.

Nümunələr

int[][] matrix;
double[][] gradesTable;
string[][] chessBoard;

Massivin yaradılması

Ölçüləri veririk: sətirlərin və sütunların sayı.

matrix = new int[3][4]; // 3 sətir, 4 sütun

Bu 3x4-lük cədvəldir: 3 sətir və 4 sütunlu Excel cədvəlini təsəvvür edin.

Dərhal dəyişəni elan edib ikiölçülü massiv yarada bilərsiniz:

int[][] matrix = new int[3][4];

Dəyərlərlə birbaşa ilkləndirmək də olar (təxminən birölçülü massivdə olduğu kimidir):

int[][] example = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};
// Cədvəl: 3 sətir, 3 sütun
İkiölçülü massivin dəyərlərlə ilkləndirilməsi

Vizual sxem

┌─────┬─────┬─────┬─────┐
│  0  │  1  │  2  │  3  │  ← sütunlar (Columns)
├─────┼─────┼─────┼─────┤
│ 0,0 │ 0,1 │ 0,2 │ 0,3 │  ← sətir 0 (Row 0)
├─────┼─────┼─────┼─────┤
│ 1,0 │ 1,1 │ 1,2 │ 1,3 │  ← sətir 1 (Row 1)
├─────┼─────┼─────┼─────┤
│ 2,0 │ 2,1 │ 2,2 │ 2,3 │  ← sətir 2 (Row 2)
└─────┴─────┴─────┴─────┘

Hər element iki indeks cütü ilə verilir [sətir, sütun].

3. İndeksləmə və elementlərə çıxış

İkiölçülü massivdə elementə çıxış üçün iki indeks göstərilir:

  • Birincisi — sətirin nömrəsi.
  • İkincisi — sütunun nömrəsi.

      // İkinci sətirdə (indeks 1), üçüncü sütun (indeks 2)
      matrix[1][2] = 99;
İkiölçülü massiv elementinə dəyər təyin edilməsi

Şahmata öyrəşənlər üçün xatırladaq: indekslər sıfırdan başlayır. Yəni birinci element — bu [0][0]-dır.

Yazma və oxuma

int[][] data = new int[5][2];
data[1][1] = 5;         // yazma
int value = data[1][1]; // oxuma

Bu, yaddaşda belə görünəcək:

İkiölçülü massivlər

4. İkiölçülü massivin doldurulması

Gəlin 1-dən 12-yə qədər ardıcıl ədədlərlə matrisi dolduran kod yazaq ki, necə işlədiyini görək.

int[][] matrix = new int[3][4];
int value = 1;

for (int row = 0; row < 3; row++)
{
    for (int col = 0; col < 4; col++)
    {
        matrix[row][col] = value;
        value++;
    }
}
İkiölçülü massivi ardıcıl ədədlərlə doldurma

İllüstrasiya:

Yerinə yetirildikdən sonra:
┌────┬────┬────┬────┐
│ 1  │ 2  │ 3  │ 4  │
├────┼────┼────┼────┤
│ 5  │ 6  │ 7  │ 8  │
├────┼────┼────┼────┤
│ 9  │ 10 │ 11 │ 12 │
└────┴────┴────┴────┘

5. İkiölçülü massivlərin quruluşu

İndi isə ikiölçülü massivlərin əslində necə qurulduğunu öyrənəcəksiniz. Hazırsınız?

İkiölçülü massivlər əslində massivlərin massividir!

Başqa sözlə, əgər adi massivdə “massiv dəyişəni massivin elementlərini saxlayan konteynerə istinad saxlayırsa”, ikiölçülü massivlərdə vəziyyət bir az daha “partlayışlıdır”: ikiölçülü‑massiv dəyişəni birölçülü massislərə istinadları saxlayan konteynerə istinad saxlayır. Bunu yüz dəfə izah etməkdənsə bir dəfə görmək daha yaxşıdır:

İkiölçülü massivlərin quruluşu

Solda bizdə “ikiölçülü‑massiv dəyişəni” var və o, “ikiölçülü massiv obyektinə” istinad saxlayır. Ortada “ikiölçülü massiv obyekti” var, onun xanalarında birölçülü massislərə istinadlar saxlanılır — ikiölçülü massivimizin sətirləri. Və sağda isə ikiölçülü massivimizin sətirləri olan dörd birölçülü massivi görürsünüz.

İkiölçülü massivlərin həqiqi quruluşu budur. Bu yanaşma Java proqramçısına bir neçə üstünlük verir:

Birincisi, “konteynerlərin konteyneri” “sətir‑massivlərə” istinadları saxladığı üçün sətirləri çox tez və asanlıqla yerləri ilə dəyişə bilərik. “Konteynerlərin konteynerinə” çıxış üçün iki indeks əvəzinə sadəcə bir indeks göstərmək kifayətdir. Nümunə:

int[][] data = new int[2][5];
int[] row1 = data[0];
int[] row2 = data[1];

Belə bir kodla sətirləri yerləri ilə dəyişmək olar:

// Məlumatları olan vacib matris
int[][] matrix = {
  {1, 2, 3, 4, 5},
  {5, 4, 3, 2, 1}
};

int[] tmp = matrix[0];
matrix[0] = matrix[1];
matrix[1] = tmp;

İkiölçülü massivin hüceyrəsinə müraciət edərkən, massiv adından sonra yalnız bir indeks göstərsəniz, siz beləliklə birölçülü massislərə istinadlar saxlayan “konteynerlərin konteynerinə” müraciət etmiş olursunuz.

6. İkiölçülü massivin ekrana çıxarılması

İkiölçülü cədvəli çıxarmaq üçün adətən ikiqat dövr istifadə olunur — bu, konsolda labirint “çəkmək” kimidir. Nümunə:

for (int row = 0; row < matrix.length; row++) 
{
    for (int col = 0; col < matrix[row].length; col++) 
    {
        System.out.print(matrix[row][col] + "\t"); 
    }
    System.out.println(); // yeni sətrə keçid
}

Çıxış nümunəsi:

1	2	3	4	
5	6	7	8	
9	10	11	12	

Yeri gəlmişkən, burada bir neçə sətir kodla cədvəlləri necə səliqəli “çəkəcəyinizi” öyrəndiniz!

1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Teatr zalında oturacaqların sxemi 🎭
Teatr zalında oturacaqların sxemi 🎭
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Informasiya lövhəsində xoş gəlmə mesajının yerləşdirilməsi 📢
Informasiya lövhəsində xoş gəlmə mesajının yerləşdirilməsi 📢
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Anbar cədvəlinin avtomatik doldurulması 📦
Anbar cədvəlinin avtomatik doldurulması 📦
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Sensor şəbəkəsi məlumatlarının göstərilməsi 📊
Sensor şəbəkəsi məlumatlarının göstərilməsi 📊
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION