1. Düzgün olmayan massivlər
Java-da sən, proqramçı olaraq, ikiölçülü massivdə sətirləri yalnız yerlərini dəyişə bilməzsən, həm də bu massivi istədiyin kimi özüv yığa bilərsən.
Götürək ki, sən istəyirsən, ikiölçülü massivdə birinci sətirin uzunluğu 10
, ikinci sətirin isə 50
olsun. Belə etmək olar? Bəli, olar.
Əvvəlcə «konteyner konteynerləri» yaratmaq lazımdır — yəni birinci massiv, hansı ki sətir massivlərinə referans saxlayacaq. Bu belə edilir:
int[][] ad = new int[yüksəklik][];
Sadəcə olaraq ikinci parametri bildirmirsən, və Java maşını yalnız «konteyner konteynerləri» yaradır. Bu kod icra olunandan sonra yaddaşda bu olacaq:

Birölçülü massivlər yaratmağı isə artıq bilirsən 🙂
Son kod belə görünəcək:
|
İkiölçülü massiv Sıfırıncı sətir — 10 elementdən ibarət massivBirinci sətir — 50 elementdən ibarət massiv. |
İndi sən belə adlandırılan «düzgün olmayan massiv» yaratdın.
Və əgər biz bu massivdəki bütün elementləri ekrana çıxarmaq istəsək, massivlərin uzunluqlarının fərqli olmasını nəzərə alaraq, length
xüsusiyyəti çox faydalı olacaq.
Yeri gəlmişkən, bizim nümunədə «konteyner konteynerlərinin» uzunluğunu necə öyrənmək olar? Axı bu da obyekt-massivdir, yəni uzunluğa malikdir. Doğru cavab — matrix.length
.
Bəs sətir massivlərinin uzunluqları necə? matrix[0].length
2. İkiölçülü massivlə işləmək
Tutaq ki, ikiölçülü bir massivi ekrana çıxarmaq istəyirsiniz. Bunu necə edək?
Kodumuz təxminən belə görünəcək:
|
Massiv yaratmaq Massivi dəyərlərlə doldurmaq Xarici dövr massiv sətirləri üzrə gedir — massiv sətirlərini keçib gedir. Daxili dövr hüceyrələr üzrə gedir — bir sətrin hüceyrələrini keçib gedir. |
Sizə iki iç içə dövr lazım olacaq. Birinci dövrü xarici, ikinci isə — daxili adlandıracağıq.
Xarici dövrdə (i
dəyişəni) ardıcıllıqla ikiölçülü massivimizin sətrindən ibarət olan bütün massivləri keçirik. i
dəyişəninin hər bir dəyəri həmin nömrəli sətirə uyğun gəlir.
Daxili dövrdə (j
dəyişəni) isə massiv-sətirlərin bütün hüceyrələrini keçirik. Daxili dövrün nəticəsində bir sətrin dəyərlərindən ibarət sətr ekrana çıxır.
Ekranda belə bir şey görünəcək:
Bir massiv sətri işlənib | |
İki massiv sətri işlənib | |
Üç massiv sətri işlənib | |
3. Çoxölçülü massivlər
Və daha bir maraqlı fakt massivlər haqqında, yəqin ki, artıq təxmin etmisiniz. Əgər ikiölçülü bir massiv yaratmaq mümkündürsə, üçölçülünü də yaratmaq olar?
Bəli, istənilən ölçüdə massiv yaratmaq olar. Belə massivlərə «çoxölçülü» deyilir.
Gəlin maraq üçün 4 ölçülü bir massiv yaradaq.
int[][][][] matrix = new int[2][3][4][5];
Çox sadə kod deyilmi?
Bəs onu əl ilə yaratmaq necə olar?
int[][][][] matrix;
matrix = new int[2][][][]; // uzunluğu 2 olan «istinadların istinadlarının istinadları» massivini yaradırıq
for (int i = 0; i < matrix.length; i++)
{
matrix[i] = new int[3][][]; // uzunluğu 3 olan «istinadların istinadları» massivini yaradırıq
for (int j = 0; j < matrix[i].length; j++)
{
matrix[i][j] = new int[4][]; // uzunluğu 4 olan istinadlar massivini yaradırıq
for (int k = 0; k < matrix[i][j].length; k++)
matrix[i][j][k] = new int[5]; // uzunluğu 5 olan tamsayılar massivlərini yaradırıq
}
}
Bu isə yalnız massiv yaratmaqdır! Axı onunla işləmək də lazımdır.
Bonus tapşırıq — üçölçülü massivdəki bütün dəyərləri ekrana çıxaran kod yazın.
GO TO FULL VERSION