1. String
tipli massiv
Qısaca String
tipli massiv haqqında danışmaq istəyirəm.
Daha əvvəl dediyimiz kimi, massiv istənilən tipdə ola bilər. Yəni, String
tipli massiv yaratmaq mümkündür. Klaviaturadan «10 sətir mətn daxil edib onları tərs qaydada ekrana çıxaran» proqram yazmalı olsaydıq, kod belə görünərdi:
|
Scanner obyektini yaradırıq10 elementlik massiv obyekti yaradırıq 0-dan 9-a qədər dövr Klaviaturadan mətn oxuyub onu massivdə növbəti hüceyrəyə yazırıq 9-dan 0-a qədər dövr Massivin növbəti hüceyrəsini ekrana çıxarırıq |
Kod demək olar ki, dəyişməyib! Yalnız massiv yaradarkən int
tipini String
ilə əvəz etmək və klaviaturadan mətn oxuyarkən nextInt()
metodunu nextLine()
ilə əvəz etmək lazım oldu.
2. String tipli String
massiv yaddaşda
Və daha bir faydalı fakt. 3 şəkilə baxaq:
Şəkil 1. String
obyektinin yaddaşda necə yerləşməsi:
Bu şəkil əvvəlki mühazirələrdən götürülüb.
Diqqət edək ki, mətn birbaşa dəyişəndə saxlanmır: onun üçün ayrıca yaddaş bloku ayrılır. String
tipli dəyişəndə mətn obyektinin ünvanı (referansı) saxlanır.
Şəkil 2. Tam ədədlərdən ibarət massiv yaddaşda necə yerləşir:
Bu da tanış bir şəkil.
Şəkil 3. Sətirlərdən ibarət massiv yaddaşda necə yerləşir:
Solda biz String[]
tipli massiv-dəyişəni görürük (obyekt-massivin ünvanını saxlayır).
Ortada — String
tipli obyekt-massiv.
Sağda isə hansısa mətnləri saxlayan obyekt-sətirlər.
String
tipli obyekt-massivin hüceyrələrində sətirlərin mətnləri deyil, onların ünvanları saxlanılır (referanslar). Eynilə, String
tipli dəyişənlərdə sətirlərin (mətn) ünvanları saxlanılır.
Hüceyrələri müqayisə edərkən bu faktı nəzərə alın:
|
10 sətirlik massiv yaradırıq Dəyərləri massivin içərisinə yazırıq true (referanslar eynidir)false (referanslar fərqlidir)true (sətirlər eynidir)true (sətirlər yenə də eynidir) |
3. Java-da massivlərin sürətli təşkili
Massivlər — çox faydalı bir şeydir, ona görə də Java tərtibatçıları onlarla işi maksimum sadə etməyə çalışıblar.
Və ilk növbədə etdikləri iş — massivlərin təşkili və ilkin dəyərlərin ona daxil olunmasını asanlaşdırmaq olub.
Axı çox zaman proqramın haradansa oxuduğu məlumatlardan əlavə, öz daxili məlumatlarına da ehtiyacı olur. Məsələn, bizə bütün ayların uzunluqlarını massivdə saxlamaq lazımdır. Bu kod necə görünə bilər:
int[] months = new int[12];
months[0] = 31; // yanvar
months[1] = 28; // fevral
months[2] = 31; // mart
months[3] = 30; // aprel
months[4] = 31; // may
months[5] = 30; // iyun
months[6] = 31; // iyul
months[7] = 31; // avqust
months[8] = 30; // sentyabr
months[9] = 31; // oktyabr
months[10] = 30; // noyabr
months[11] = 31; // dekabr
Amma bu kodu daha qısa yaza biləcəyimiz bir üsul var — təşəkkürlər Java yaradıcılarına:
// ilin aylarının uzunluqları
int[] months = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Sadəcə massivdəki bütün dəyərləri vergüllə ayıraraq yazmaq kifayətdir!
Rahatdır, düzdür? Amma bununla iş bitmir.
Məlum olub ki, kompilyator massiv dəyişəninin növünə əsasən container (massiv obyekti) tipini təyin edə bilər. Və massiv uzunluğunu müəyyən etmək üçün isə sadəcə fiqurlu mötərizələrdə yazılmış elementlərin sayını hesablaya bilər.
Buna görə, bu kodu daha da qısa yazmaq olar:
// ilin aylarının uzunluqları
int[] months = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Möhtəşəm deyil? 🙂
Bu yazı tərzi «massivin sürətli təşkili» adlanır. Ayrıca, bu yalnız int
tipi üçün işləmir...
// ilin aylarının adları
String[] months = { "Yanvar", "Fevral", "Mart", "Aprel", "May", "İyun", "İyul", "Avqust", "Sentyabr", "Oktyabr", "Noyabr", "Dekabr"};
GO TO FULL VERSION