Salam! Əvvəllər təlim zamanı biz tək obyektlərlə (yaxud primitiv növlərlə) işləyirdik. Bəs bir obyektlə deyil, bütöv bir qrupla işləmək lazımdırsa? Məsələn, biz şirkətimizdəki bütün işçilərin doğum günlərinin siyahısını yaratmaq istəyirik. O, məsələn, formatda 30 sətirdən ibarət olmalıdır: "Andrey Petrov, 25 yanvar." Burada bizə xüsusi məlumat strukturu, massiv kömək edəcək. Massivi real həyatdakı obyektlərlə müqayisə etsəniz, onun strukturu xanaları olan bank anbarına çox bənzəyir: Massiv də xanalardan ibarətdir. Hər hüceyrəyə bir şey qoya bilərsiniz. Bu halda, məzmuna daxil olmaq üçün hüceyrə nömrəsini bilməlisiniz. Massiv belə yaradılmışdır:
public class Main {
public static void main(String[] args) {
String [] birthdays = new String[10]; // array of Java strings
}
}
Burada 10 xanadan ibarət massiv yaratdıq. Dərhal serialın bəzi xüsusiyyətlərinə diqqət yetirə bilərsiniz:
- O, ciddi şəkildə müəyyən edilmiş tipli məlumatları saxlayır. Əgər əvvəlcə sətir massivi yaratsaq
String
, onda başqa heç nə saxlaya bilməyəcəyik. Məlumat növü massiv yaradılarkən müəyyən edilir. Onu müştərinin istədiyi hər şeyi saxlaya biləcəyi seyfdən fərqləndirən cəhət budur. - Massiv primitiv tipli (məsələn,
int
), sətirlərin (String
) və ya eyni sinif obyektlərinin məlumatlarını saxlaya bilər. Daha doğrusu, hətta obyektlərin özləri deyil, bu obyektlərə keçidlər. - Yaratma zamanı massivin ölçüsü müəyyən edilməlidir. Siz onu daha sonra dəqiqləşdirə və ya yaratdıqdan sonra ölçüsünü dəyişə bilməyəcəksiniz.
[]
Java ifadənin hər iki tərəfində kvadrat mötərizələrdən istifadə etməklə massivin yaradıldığını göstərir . Onlar istinad dəyişəninin adından əvvəl və ya sonra göstərilə bilər - bu hər iki şəkildə işləyəcək:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Əgər massivə nəsə yazmaq istəyirsinizsə, dəyərin yazılacağı xananın nömrəsini göstərməlisiniz. Massiv xanalarının nömrələri 0-dan başlayır. Sıfırdan başlayaraq proqramlaşdırmada ümumi təcrübədir. Nə qədər tez öyrəşsən, bir o qədər yaxşıdır :) Yəni massivin birinci xanasına müəyyən dəyər qoymaq istəyirsinizsə , bu belə edilir:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
}
}
İndi həmkarlarımızın ad günlərini ehtiva edən massivimizin ilk xanasında Lenanın doğum günü olan bir sətir var. Bənzətmə ilə başqa dəyərlər də əlavə edə bilərsiniz:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
birthdays[1] = "Kolya Romanov, May 18";
birthdays[7] = "Olesya Ostapenko, January 3";
}
}
Diqqət yetirin: səkkizinci kameraya Olesyanın ad gününü əlavə etdik (7 nömrəli kameranın niyə səkkizinci olduğunu unutmusunuz?). Bütün digər hüceyrələr doldurulmasa da. Dəyərləri ardıcıllıqla sıraya yazmaq lazım deyil - belə bir məhdudiyyət yoxdur. Digər tərəfdən, ardıcıllıqla yazsanız, boş və işğal edilmiş hüceyrələrin sayını izləmək daha asan olacaq və massivdə heç bir "deşik" qalmayacaq. Əgər siz bank xanasında olduğu kimi massiv xanasının məzmununu əldə etmək istəyirsinizsə, onun nömrəsini bilməlisiniz. Bu belə edilir:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
birthdays[1] = "Kolya Romanov, May 18";
birthdays[7] = "Olesya Ostapenko, January 3";
String olesyaBirthday = birthdays[7];
System.out.println(olesyaBirthday);
}
}
Konsol çıxışı:
Олеся Остапенко, 3 января
Biz dəyişən yaratdıq String
və tərtibçiyə dedik: “Massivdə indeksi 7 olan xananı tapın birthdays
və orada saxlanılan dəyəri dəyişənə təyin edin String
olesyaBirthday
.” Məhz bunu etdi.
Java massivinin uzunluğu
Massivlə işləyərkən onun uzunluğunu xüsusi xüsusiyyətdən istifadə edərək asanlıqla öyrənə bilərsiniz -length
.
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
birthdays[1] = "Kolya Romanov, May 18";
birthdays[7] = "Olesya Ostapenko, January 3";
int birthdaysLength = birthdays.length;
System.out.println(birthdaysLength);
}
}
Konsol çıxışı:
10
Qeyd:Mülk length
doldurulmuş xanaların sayını deyil, massivin ölçüsünü saxlayır. Massivimiz yalnız 3 dəyər saxlayır, lakin biz onu yaradanda onun üçün size = 10 təyin etdik. Bu sahənin qaytardığı dəyərdir length
. Bu niyə faydalı ola bilər? Məsələn, bütün doğum günlərinin siyahısını konsolda çap etmək istəyirsinizsə (heç kimin unudulmadığını yoxlamaq üçün), bunu bir sadə döngədə edə bilərsiniz:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
birthdays[1] = "Kolya Romanov, May 18";
birthdays[2] = "Vika Ignatova, July 12";
birthdays[3] = "Denis Kozlov, September 7";
birthdays[4] = "Maxim Maslennikov, November 9";
birthdays[5] = "Roman Baranov, August 14";
birthdays[6] = "Valery Pyatkina, April 1";
birthdays[7] = "Olesya Ostapenko, January 3";
birthdays[8] = "Kostya Gurko, October 19";
birthdays[9] = "Seryozha Naumov, May 3";
for (int i = 0; i < birthdays.length; i++) {
System.out.println(birthdays[i]);
}
}
}
Döngədə i
başlanğıcda sıfıra bərabər olan dəyişən yaradırıq. Hər keçiddə i indeksli xananı massivimizdən götürüb onun dəyərini konsola çap edirik. Döngü 10 iterasiya edəcək və i dəyərləri 0-dan 9-a qədər artacaq - yalnız massivimizin hüceyrələrinin indekslərinə görə! birthdays[0]
Bu yolla biz konsoldan bütün dəyərləri çap edəcəyik.Əslində birthdays[9]
massivi fərqli şəkildə yaratmağın yolları var. Məsələn, rəqəmlər massivi int
belə yaradıla bilər:
public class Main {
public static void main(String[] args) {
int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
}
}
Bu üsul "sürətli başlatma" adlanır. Bu, olduqca rahatdır ki, biz dərhal bir massiv yaradırıq və onu dəyərlərlə doldururuq. Massivin ölçüsünü açıq şəkildə göstərməyə ehtiyac yoxdur - length
sürətli başlatma zamanı sahə avtomatik olaraq doldurulacaq.
public class Main {
public static void main(String[] args) {
int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
System.out.println(numbers.length);
}
}
Konsol çıxışı:
9
Java obyekt massivi
Siz artıq eşitmisiniz ki, obyektlərin massivləri və primitivlər massivləri yaddaşda fərqli şəkildə saxlanılır. Məsələn, üç obyektdən ibarət massiv götürəkCat
:
public class Cat {
private String name;
public Cat(String name) {
this.name = name;
}
public static void main(String[] args) {
Cat[] cats = new Cat[3];
cats[0] = new Cat("Thomas");
cats[1] = new Cat("Hippopotamus");
cats[2] = new Cat("Philip Markovich");
}
}
Burada başa düşmək üçün bir neçə şey var:
- Primitivlər vəziyyətində, Java massivləri bir çox xüsusi dəyərləri (məsələn, rəqəmlər
int
) saxlayır. Obyektlərə gəldikdə, massiv çoxlu istinadları saxlayır. Massivcats
hər birində obyektə istinad olan üç xanadan ibarətdirCat
. Bağlantıların hər biri yaddaşda həmin obyektin saxlandığı ünvana işarə edir. - Massiv elementləri yaddaşda bir blokda saxlanılır. Bu, onlara daha səmərəli və tez daxil olmaq üçün edilir. Beləliklə, keçid
cats
yaddaşda bütün obyektlərin - massivin elementlərinin saxlandığı bloka işarə edir. Acats[0]
- bu blok daxilində müəyyən bir ünvana.
Massivlər massivi və ya ikiölçülü massiv
Buna əsaslanaraq, biz sualla qarşılaşırıq - məsələn, sətirlər və ya rəqəmlər massivi deyil, massivlər yarada bilərikmi? Və cavab olacaq - bəli, edə bilərik! Massiv onun daxilində istənilən obyekti, o cümlədən digər massivləri saxlaya bilər. Belə bir massiv ikiölçülü adlanacaq. Əgər onu bir şəkildə təsvir etsəniz, adi bir masaya çox bənzəyəcək. Məsələn, biz hər biri 10 xana olan 3 ədəd massivi saxlayacaq massiv yaratmaq istəyirikint
. Bu belə görünəcək: Hər bir sətir ədədlər massivini təmsil edir int
. Birinci massivdə 1-dən 10-a qədər rəqəmlər, ikincisi -1-dən -10-a qədər, üçüncüsü - təsadüfi ədədlər toplusudur. Bu massivlərin hər biri ikiölçülü massivimizin xanasında saxlanılır. Kodda iki ölçülü massivin işə salınması belə görünür:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
}
İki ölçülü pişiklər massivimiz hər biri 5 hüceyrədən ibarət 3 massiv saxlayır. Obyektimizi ikinci massivin üçüncü xanasına qoymaq istəsək, bunu belə edirik:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
cats[1][2] = new Cat("Fluff");
}
[1]
ikinci massivi göstərir və [2]
bu massivin üçüncü xanasına işarə edir. İki ölçülü massiv bir neçə massivdən ibarət olduğundan, onu keçmək və bütün dəyərləri konsola çap etmək (və ya bütün xanaları doldurmaq) üçün bizə ikiqat, iç-içə döngə lazımdır:
for (int i = 0; i < cats.length; i++) {
for (int j = 0; j < cats[i].length; j++) {
System.out.println(cats[i][j]);
}
}
Xarici döngədə (dəyişən i
) biz ikiölçülü massivimizi təşkil edən bütün massivləri növbə ilə keçirik. Daxili döngədə (dəyişən j
) hər massivin bütün xanalarını təkrarlayırıq. Nəticədə konsolda əvvəlcə obyekt (birinci massiv, birinci xana), ikinci obyekt isə (birinci massiv, ikinci xana) cats[0][0]
göstəriləcək . cats[0][1]
Birinci massiv tükəndikdə, , cats[1][0]
, cats[1][1]
və cats[1][2]
s. çıxacaq. Yeri gəlmişkən, sürətli başlatma iki ölçülü massivlər üçün də mövcuddur:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
Normalda biz ikiölçülü massivi numbers
kimi yazardıq int[3][3]
, lakin bu metod bizə dərhal dəyərləri təyin etməyə imkan verir. Niyə iki ölçülü massiv lazım ola bilər? Məsələn, onun köməyi ilə məşhur "Döyüş gəmisi" oyununu asanlıqla yenidən yarada bilərsiniz: "Döyüş gəmisi" ndə oyun sahəsinin quruluşu elədir ki, onu asanlıqla təsvir etmək olar: 10 massivdən, hər biri 10 hüceyrədən ibarət iki ölçülü massiv. . Siz iki belə massiv yaradırsınız - özünüz və rəqibiniz üçün:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
*
Gəmilərinizin yerləşdiyi xanaları bəzi dəyərlərlə (məsələn, rəqəmlər və ya işarələr) doldurursunuz , sonra siz və rəqibiniz növbə ilə hüceyrə nömrələrinə zəng edirsiniz:
- seaBattle[6][5]!
- Keçmiş! seaBattle2[6][6]!
- Yaralı!
- seaBattle2[6][7]!
- Yaralı!
- seaBattle2[6][8]!,
- Öldürüldü!
Massivlər haqqında əlavə resurslar
Massivlər haqqında daha çox bilmək istəyirsiniz? Zəhmət olmasa aşağıdakı məqalələrə nəzər salın. Bu mövzuda çox maraqlı və faydalı məlumatlar var.- Java-da massivlər - massivlər, onların yaradılması, işə salınması və istifadəsi haqqında ətraflı məqalə. Nümunələr ilə.
- Arrays sinfi və onun istifadəsi - məqalədə sinfin bəzi üsulları təsvir edilmişdir
Array
- Massivlər massivlərə həsr olunmuş ilk JavaRush mühazirəsidir.
- Çoxölçülü massivlər - nümunələrlə çoxölçülü massivlər haqqında ətraflı məqalə.
- Sıfır uzunluqlu massivi qaytarın, null deyil - Effektiv Proqramlaşdırma müəllifi Joshua Bloch boş massivləri necə daha yaxşı qaytarmaq barədə danışır.
GO TO FULL VERSION