CodeGym /Kurslar /JAVA 25 SELF /Massivlərlə tanışlıq

Massivlərlə tanışlıq

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

1. Massiv — elementlər üçün konteynerdir

Yəqin ki, kompyuterlərin nəhəng həcmdə məlumatı işləyə bildiyini eşitmisiniz. Şərt operatoru (if-else) və dövrlər (for, while) buna, əlbəttə, kömək edir. Amma bununla çox irəli getməyəcəksiniz, çünki işlənəcək məlumatları hansısa yerdə saxlamaq lazımdır.

Bu məqsədlə Java-da, demək olar ki, bütün proqramlaşdırma dillərində olduğu kimi, massivlər (Array) kimi əla bir şey var. Onlara hələ “cədvəl” də deyilir.

Massiv — bu, tək bir dəyər deyil, bir neçə dəyəri saxlaya biləcəyiniz xüsusi obyektdir.

Java massivləri (Array)

Əgər əvvəllər dəyişəni içində hər hansı bir dəyər saxlamağın mümkün olduğu bir qutu ilə müqayisə etmişdiksə, massiv — içəridə bölmələrə ayrılmış bir qutu kimidir. «Qutu-massivdə» hər bölmənin öz nömrəsi var. Nömrələmə, təbii ki, sıfırdan başlayır...

Başqa bir bənzətmə də verə bilərik. Gəlin adi yaşayış evini çoxmərtəbəli binayla müqayisə edək. Adi evdə bir ailə yaşayır, çoxmərtəbəli bina isə mənzillərə bölünüb. Adi evdə yaşayan ailəyə məktub yazmaq üçün onun unikal ünvanını göstərmək lazımdır. Mənzildə yaşayan ailəyə məktub yazmaq üçün isə evin unikal ünvanını və bir də mənzilin nömrəsini yazmaq lazımdır.

Deməli, massiv tipli dəyişən — çoxmərtəbəli bina kimidir. Orada tək bir dəyəri deyil, bir neçəsini saxlamaq olar. Belə dəyişəndə bir neçə mənzil (element) var və hər birinə onun nömrəsi (indeksi) ilə müraciət etmək mümkündür.

Bunun üçün dəyişənin adından sonra kvadrat mötərizələrdə müraciət etdiyimiz elementin indeksini göstərmək lazımdır. Bu olduqca sadədir:


array[indeks] = znachenie;
İndeks üzrə massivin elementinə dəyər təyin etmə

Harada ki, array — massiv tipli dəyişənin adıdır, indeks — massivdəki elementin nömrəsi, znachenie isə — göstərilən elementə yerləşdirmək istədiyimiz dəyərdir.

Amma əvvəlcə gəlin massivlərin necə yaradıldığını anlayaq.

2. Java-da elementlərdən ibarət massiv yaratmaq

Java-da massiv elementlərinin yaradılması

Tutaq ki, proqramınız haradasa 100 tam ədədi saxlamaq məcburiyyətindədir. Böyük ehtimalla bunun üçün massiv uyğundur. Bəs onu necə yaratmaq olar?

Əgər bir tam ədəd saxlamaq istəsəydik, bizə int tipi kifayət edərdi, bəs 100 tam ədəd saxlamaq istəsək, yəqin ki, int tipli massivə ehtiyac olacaq. Onu yaratmaq üçün kod belə görünəcək:

int[] array = new int[100];
100 int ədədindən ibarət massiv yaratmaq

Gəlin burada nə yazıldığını başa düşək.

Yəqin artıq təxmin etdiyiniz kimi, bərabərlik işarəsinin solunda array adlı dəyişənin int[] tipində elan olunması var. int tipindən sonra gələn kvadrat mötərizələr bu “qutu” tipində tək bir dəyər deyil, bir neçəsinin saxlanılacağını bildirir.

Bərabərlik işarəsinin sağında isə new sözü ilə int tipində 100 elementlik (hüceyrəlik) obyektin yaradılması yazılıb. Bu da elə çətin deyil.

Məsələn, 20 elementdən ibarət və həqiqi ədədləri saxlamaq üçün massiv yaratmaq istəsəydik, onun yaradılma kodu təxminən belə olardı:

double[] vals = new double[20];
20 həqiqi ədədli massiv yaratmaq

Massivdəki elementlərin sayına massivin ölçüsü və ya massivin uzunluğu deyilir. Bir çox dəyəri saxlaya bildiklərinə görə massivlərə bəzən konteyner də deyirlər.

Vacib fakt: massiv konteynerinin ölçüsünü yaradıldıqdan sonra dəyişmək olmaz.

Yenisini yaratmaq olar, amma artıq yaradılmış konteynerin uzunluğunu dəyişmək mümkün deyil.

3. Massivin elementləri ilə iş

Massivin elementləri ilə iş

Yaxşı, massiv yaratmağı öyrəndik, bəs onlarla düzgün necə işləmək lazımdır?

Demək olar ki, adi dəyişənlərlə olduğu kimidir, ancaq massiv tipli dəyişənin adı göstərildikdən sonra mütləq işlədiyimiz elementin nömrəsini (indeksini) göstərmək lazımdır.

Massivin elementlərinin nömrələnməsi həmişə sıfırdan başlayır. Əgər bizdə 10 elementli massiv varsa, onun elementlərinin nömrələri (indeksləri) 0..9 olacaq; əgər massiv 200 elementlidirsə, onda 0..199. Və sair bu qayda ilə.

Nümunələr:

int[] a = new int[10];	// int tipli 10 elementlik massiv yaradırıq.

a[2] = 4;				// İndeksi 2 olan elementə 4 yazırıq.

a[7] = 9;				// İndeksi 7 olan elementə 9 yazırıq.

a[9] = a[2] + a[5];		// İndeksi 9 olan elementə 2-ci və 5-ci elementlərin cəmini yazırıq
                        // (orada 4 var) və 5 (orada 0 var). 

Bu kod icra edildikdən sonra yaddaşda belə məlumat saxlanılacaq:

int tipli massivin elementləri ilə iş

Massivin sol sütununda (boz rənglə) — elementlərin nömrələri (indeksləri) göstərilib. Elementlərdə isə daxil etdiyimiz dəyərlər saxlanılır: 4, 94. Massiv yaradıldıqdan dərhal sonra onun elementləri sıfırlarla doldurulur.

Vacibdir. Massivin bütün elementləri eyni məlumat tipinə malikdir. Əgər String sətirlərindən ibarət massiv yaratmışıqsa, onun elementlərində yalnız sətirlər saxlanıla bilər. Massivin məlumat tipi onun yaradılması zamanı təyin olunur. Nə məlumat tipini, nə də massivin uzunluğunu sonradan dəyişmək mümkün deyil.

4. Yaddaşda massivlər

Əvvəlki nümunələrdəki şəkillər bir qədər dəqiqlikdən uzaq idi.

Massivlər (eləcə də sətirlər) yaradılarkən yaddaşda iki blok ayrılır: biri birbaşa massivin (konteynerin) saxlanılması üçün, digəri isə onun ünvanını saxlayan dəyişən üçün. Dəqiqləşdirilmiş vəziyyət aşağıdakı şəkildə göstərilib:

Yaddaşda massivlər

Yaşıl rənglə int tipli 10 elementli massiv və həmin int[] tipli dəyişən göstərilib; bu dəyişən yaddaşda int tipli massivə ünvanı (istinadı) saxlayır.

Müqayisə üçün, mavi rənglə int tipli adi dəyişən göstərilib; o, 199 dəyərini saxlayır.

Nədənsə sətirlərin yaddaşda saxlanılmasını xatırladır, elə deyilmi?

Düzdür, sətirlər kimi, “massiv tipli dəyişənləri” də bir-birinə mənimsətmək olar:

int[] a = new int[10];		// int tipli 10 elementlik massiv yaradırıq.

a[2] = 4;					// İndeksi 2 olan elementə 4 yazırıq.
a[7] = 9;					// İndeksi 7 olan elementə 9 yazırıq.

int[] b = a;				// b dəyişəninə a dəyişənində olan ünvanı yazırıq.
                            // Artıq a və b yaddaşda eyni obyekt-massivə işarə edir.

a[9] = b[2] + a[7];			// Obyekt-massivin 9-cu elementinə
                            // 2-ci (orada 4 var) və 7-ci (orada 9 var) elementlərin cəmini yazırıq. 

Bu zaman obyekt-massiv əvvəlki yerində qalacaq və ab dəyişənləri eyni obyektə aparan eyni ünvanı (istinadı) saxlayacaq. Şəkilə baxın:

Yaddaşda massivlər 2

5. Massivlərlə daha ətraflı iş

Massivi istənilən tipdən yaratmaq olar. Bunun üçün tip adından sonra kvadrat mötərizə yazmaq kifayətdir. Massiv yaratmağın ümumi görünüşü belədir:

tip[] imya = new tip[kolichestvo];
Massiv yaratmağın kanonik forması

Burada tip — massivdə saxlayacağımız elementlərin (hüceyrələrin) tipidir. Imya — massivi çağıracağımız dəyişənin adıdır, kolichestvo isə — massivdəki elementlərin sayıdır.

Yuxarıdakı nümunədə kanonik forma göstərilib: massiv tipli dəyişənin yaradılması və obyekt-massivin yaradılması. Əslində bunlar iki müstəqil konstruksiyadır. Massiv tipli dəyişəni və obyekt-massivi ayrıca yaratmaq olar:

tip[] imya;
imya = new tip[kolichestvo];
Dəyişəni və massivi ayrıca yaradırıq

Və daha bir önəmli məqam

Massivin indeksi kimi də, elementlərin sayı kimi də dəyişənlər, hətta tam ifadələr də çıxış edə bilər.

Nümunələr:

int n = 100;
int[] a = new int[n];			// 	n elementdən ibarət massiv yaratmaq

int n = 100;
int[] a = new int[n * 2 + 3];	// 	203 elementlik massiv yaratmaq

int n = 100;
int[] a = new int[n];
a[n-1] = 2;					// a[99] = 2;
a[n-2] = 3;					// a[98] = 3;
a[n/5] = a[n-1] + a[n-2]	// a[20] = a[99] + a[98];

Massiv sərhədlərindən kənara çıxma

Yeri gəlmişkən, diqqətinizi ona yönəldirik ki, əgər massivdə mövcud olmayan indekslə elementə müraciət etməyə çalışsanız (bizim halımızda bu, 0..99 aralığından başqa bütün tam ədədlərdir), proqram ArrayIndexOutOfBoundsException xətası ilə qəza rejimində dayanacaq — indeks massiv sərhədlərini aşıb.

6. Massivin uzunluğu

Öncəki nümunədə gördüyümüz kimi, massiv tipli dəyişəni ayrıca yaratmaq və sonra kodun hansısa yerində ona dəyər (obyekt-massivin istinadı) mənimsətmək olar. Hətta belə də etmək mümkündür:

int[] array;			//	int[] tipli massiv dəyişəni yaradırıq
if (a < 10)				// Əgər a dəyişəni 10-dan kiçikdirsə,
   array = new int[10];	// onda 10 elementlik massiv yarat.
else					// Əks halda
   array = new int[20];	// 20 elementlik massiv yarat 

Bəs belə massivlə sonra necə işləmək olar? Onun neçə elementi olduğunu necə bilmək olar?

Bunun üçün massivdə xüsusi bir xassə (dəyişən) var — length. Massivin uzunluğunu bu ifadə ilə öyrənmək olar:

array.length;
length xassəsi vasitəsilə massivin uzunluğunu əldə etmə

Harada ki, array — massiv tipli dəyişənin adıdır, length isə obyekt-massivin xassəsinin adıdır. length xassəsinin dəyərini dəyişmək olmaz: length xassəsinin dəyərini digər dəyişənlərə mənimsətmək olar, lakin ona heç nə mənimsətmək mümkün deyil (proqram sadəcə tərtib olunmayacaq).

Öncəki nümunəni belə davam etdirmək olar:

int[] array;			//	int[] tipli massiv dəyişəni yaradırıq
if (a < 10)				// Əgər a dəyişəni 10-dan kiçikdirsə,
   array = new int[10];	// onda 10 elementlik massiv yarat.
else					// Əks halda
   array = new int[20];	// 20 elementlik massiv yarat 

for (int i = 0; i < array.length; i++)	// Massivin bütün elementləri üzrə dövr: 0-dan array.length — 1-ə qədər
{
   System.out.println(array[i]);
}

7. Java-da massivlər haqqında faktlar

Gəlin massivlər haqqında məlum faktları xülasə edək:

  • Fakt 1. Massiv çoxlu elementdən ibarətdir.
  • Fakt 2. Müəyyən elementə giriş onun nömrəsi göstərilməklə həyata keçirilir.
  • Fakt 3. Bütün elementlər eyni tipdədir.
  • Fakt 4. Bütün elementlər üçün başlanğıc dəyər — 0null (əgər elementdə ünvan saxlanılırsa), false ( boolean tipi üçün).
  • Fakt 5. String[] list — bu sadəcə dəyişənin elan olunmasıdır: konteynerin (obyekt-massivin) özü hələ yaradılmayıb. Onunla işləmək üçün massivi (konteyneri) yaratmaq və onu həmin dəyişənə yazmaq, sonra isə ondan istifadə etmək lazımdır. Aşağıdakı nümunəyə baxın.
  • Fakt 6. Obyekt-massiv (konteyner) yaratdıqda, onun uzunluğunu — neçə elementi olacağını göstərmək lazımdır. Bu, belə əmrlə edilir: new TypeName[n];
  • Fakt 7. Massivin uzunluğunu .length xassəsi ilə öyrənmək olar.
  • Fakt 8. Massiv yaradıldıqdan sonra nə elementlərinin tipini, nə də sayını dəyişmək olar.
String s;				// s-in dəyəri null-dur
String[] list;			// list-in dəyəri null-dur

list = new String[10];	// list dəyişəni 10 elementdən ibarət sətir massivi olan obyektə istinad saxlayır.
int n = list.length;	// n 10-a bərabərdir

list = new String[0];	// İndi list 0 elementli massiv saxlayır. 
                        // Massiv var, amma element saxlaya bilmir.

list = null;
System.out.println(list[1]); // Proqram xətası yaranacaq — proqram qəza rejimində dayanacaq. 
                            // list boş istinad saxlayır — null

list = new String[10];
System.out.println(list[10]);	// Xəta yaranacaq — massiv sərhədlərindən kənara çıxma.
//	Əgər list 10 element/hüceyrə saxlayırsa, icazə verilən indekslər: 0 1 2 3 4 5 6 7 8 9 — cəmi 10 ədəd. 	
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Macəraçının çantasının hazırlanması 🎒
Macəraçının çantasının hazırlanması 🎒
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Sevimli proqramlaşdırma dilləri siyahısının qiymətləndirilməsi 💬
Sevimli proqramlaşdırma dilləri siyahısının qiymətləndirilməsi 💬
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Meteorologiya stansiyasının sensorlarının quraşdırılması ☀️
Meteorologiya stansiyasının sensorlarının quraşdırılması ☀️
1
Tapşırıq
JAVA 25 SELF, səviyyə, dərs
Bağlanıb
Turnir nəticələri lövhəsinin doldurulması 🏆
Turnir nəticələri lövhəsinin doldurulması 🏆
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION