Salom! Ilgari, mashg'ulot paytida biz bitta ob'ektlar (yoki ibtidoiy turlar) bilan ishladik. Ammo bitta ob'ekt bilan emas, balki butun guruh bilan ishlashimiz kerak bo'lsa-chi? Misol uchun, biz kompaniyamizdagi barcha xodimlarning tug'ilgan kunlari ro'yxatini tuzmoqchimiz. U, aytaylik, formatda 30 qatordan iborat bo'lishi kerak: "Andrey Petrov, 25 yanvar." Bu erda bizga maxsus ma'lumotlar strukturasi, massiv yordam beradi. Agar siz massivni real hayotdagi obyektlar bilan solishtirsangiz, uning tuzilishi yacheykalari bo'lgan bank omboriga juda o'xshaydi: Massiv ham hujayralardan iborat. Har bir hujayraga biror narsa qo'yishingiz mumkin. Bunday holda, tarkibga kirish uchun siz hujayra raqamini bilishingiz kerak. Massiv quyidagicha yaratilgan:
public class Main {
public static void main(String[] args) {
String [] birthdays = new String[10]; // array of Java strings
}
}
Bu erda biz 10 ta hujayradan iborat massivni yaratdik. Siz darhol massivning ba'zi xususiyatlariga e'tibor berishingiz mumkin:
- U qat'iy belgilangan turdagi ma'lumotlarni saqlaydi. Agar biz dastlab string array ni yaratgan bo'lsak
String
, unda boshqa hech narsa saqlay olmaymiz. Ma'lumotlar turi massivni yaratishda belgilanadi. Bu uni mijoz xohlagan narsani saqlashi mumkin bo'lgan seyfdan ajratib turadigan narsa. - Massiv ibtidoiy turdagi ma'lumotlarni (masalan,
int
), satrlarni (String
) yoki bir xil sinf ob'ektlarini saqlashi mumkin. Aniqrog'i, ob'ektlarning o'zi ham emas, balki ushbu ob'ektlarga havolalar. - Yaratish vaqtida massivning o'lchami ko'rsatilishi kerak. Siz uni keyinroq koʻrsata olmaysiz yoki yaratgandan keyin oʻlchamini oʻzgartira olmaysiz.
[]
Java ifodaning har ikki tomonidagi kvadrat qavslar yordamida massiv yaratilayotganligini bildiradi . Ular mos yozuvlar o'zgaruvchisi nomidan oldin yoki keyin ko'rsatilishi mumkin - u har qanday tarzda ishlaydi:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Agar siz massivga biror narsa yozmoqchi bo'lsangiz, qiymat yoziladigan katak raqamini ko'rsatishingiz kerak. Massiv katak raqamlari 0 dan boshlanadi. Noldan boshlash dasturlashda keng tarqalgan amaliyotdir. Qanchalik tez ko'niksangiz, shuncha yaxshi :) Ya'ni, agar siz massivning birinchi katagiga qandaydir qiymat qo'ymoqchi bo'lsangiz , u quyidagicha amalga oshiriladi:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
}
}
Endi massivimizning birinchi katakchasida hamkasblarning tug'ilgan kunlari mavjud, unda Lenaning tug'ilgan kuni bilan qator mavjud. Analogiya bo'yicha siz boshqa qiymatlarni qo'shishingiz mumkin:
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";
}
}
E'tibor bering: biz Olesyaning tug'ilgan kunini sakkizinchi katakka qo'shdik (nega 7-sonli kamera sakkizinchi ekanligini unutdingizmi?). Boshqa barcha hujayralar to'ldirilmagan bo'lsa-da. Qiymatlarni massivga tartibda yozish shart emas - bunday cheklov yo'q. Boshqa tomondan, agar siz tartibda yozsangiz, bo'sh va ishg'ol qilingan hujayralar sonini kuzatish ancha oson bo'ladi va massivda "teshiklar" qolmaydi. Agar siz bank xujayrasidagi kabi massiv yacheyka mazmunini olishni istasangiz, uning raqamini bilishingiz kerak. Bu shunday amalga oshiriladi:
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 chiqishi:
Олеся Остапенко, 3 января
Biz o'zgaruvchi yaratdik String
va kompilyatorga: "Masivdagi 7 indeksli katakchani toping birthdays
va u erda saqlangan qiymatni o'zgaruvchiga belgilang String
olesyaBirthday
" dedik. U aynan shunday qilgan.
Java massiv uzunligi
Massiv bilan ishlashda siz uning uzunligini maxsus xususiyatdan foydalanib osongina topishingiz mumkin -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 chiqishi:
10
Eslatma:Xususiyat length
to'ldirilgan hujayralar sonini emas, balki massiv hajmini saqlaydi. Bizning massivimiz faqat 3 ta qiymatni saqlaydi, lekin biz uni yaratganimizda uning uchun size = 10 ni belgiladik.Bu maydon qaytaradigan qiymatdir length
. Nima uchun bu foydali bo'lishi mumkin? Masalan, agar siz konsolda barcha tug'ilgan kunlar ro'yxatini chop qilmoqchi bo'lsangiz (hech kim unutilmaganligini tekshirish uchun), buni bitta oddiy tsiklda qilishingiz mumkin:
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]);
}
}
}
Loopda biz i
dastlab nolga teng bo'lgan o'zgaruvchini yaratamiz. Har bir o'tishda biz massivimizdan i indeksli katakchani olamiz va uning qiymatini konsolga chop qilamiz. Loop 10 ta takrorlashni amalga oshiradi va i qiymatlari 0 dan 9 gacha ko'tariladi - bizning massivimiz hujayralarining indekslariga ko'ra! Shunday qilib, biz barcha qiymatlarni konsolga bosib chiqaramiz.Aslida birthdays[0]
, birthdays[9]
massivni boshqacha yaratish usullari mavjud. Masalan, raqamlar qatori int
quyidagicha tuzilishi mumkin:
public class Main {
public static void main(String[] args) {
int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
}
}
Ushbu usul "tez ishga tushirish" deb ataladi. Bu juda qulay, chunki biz darhol massiv yaratamiz va uni qiymatlar bilan to'ldiramiz. Massivning o'lchamini aniq belgilashning hojati yo'q - length
tez ishga tushirish vaqtida maydon avtomatik ravishda to'ldiriladi.
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 chiqishi:
9
Java ob'ektlar massivi
Ob'ektlar massivlari va ibtidoiy massivlar xotirada turlicha saqlanadi, deb eshitgansiz. Masalan, uchta ob'ektdan iborat massivni olaylikCat
:
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");
}
}
Bu erda tushunish kerak bo'lgan bir nechta narsa bor:
- Primitivlar bo'lsa, Java massivlari ko'plab o'ziga xos qiymatlarni saqlaydi (masalan, raqamlar
int
). Ob'ektlarga kelsak, massiv ko'plab havolalarni saqlaydi. Massivcats
uchta hujayradan iborat bo'lib, ularning har biri ob'ektga havolani o'z ichiga oladiCat
. Bog'lanishlarning har biri ushbu ob'ekt saqlanadigan xotiradagi manzilga ishora qiladi. - Massiv elementlari xotirada bitta blokda saqlanadi. Bu ularga yanada samarali va tez kirish uchun amalga oshiriladi. Shunday qilib, havola
cats
barcha ob'ektlar - massivning elementlari - saqlanadigan xotiradagi blokga ishora qiladi. Acats[0]
- ushbu blokdagi ma'lum bir manzilga.
Massivlar massivi yoki ikki o'lchovli massiv
Shunga asoslanib, biz savolga duch kelamiz - masalan, satrlar yoki raqamlar massivini emas, balki massivlarni yaratish mumkinmi? Va javob bo'ladi - ha, biz qila olamiz! Massiv o'z ichidagi har qanday ob'ektni, shu jumladan boshqa massivlarni ham saqlashi mumkin. Bunday massiv ikki o'lchovli deb nomlanadi. Agar siz uni rasmda tasvirlasangiz, u oddiy stolga juda o'xshash bo'ladi. Misol uchun, biz har birida 10 ta hujayradan iborat 3 ta sonli massivni saqlaydigan massiv yaratmoqchimizint
. Bu quyidagicha ko'rinadi: Har bir qator raqamlar qatorini ifodalaydi int
. Birinchi massiv 1 dan 10 gacha raqamlarni, ikkinchisi -1 dan -10 gacha, uchinchisi - tasodifiy sonlar to'plamini o'z ichiga oladi. Ushbu massivlarning har biri bizning ikki o'lchovli massivimizning yacheykasida saqlanadi. Kodda ikki o'lchovli massivni ishga tushirish quyidagicha ko'rinadi:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
}
Bizning ikki o'lchovli mushuklar massivi har biri 5 hujayradan iborat 3 ta massivni saqlaydi. Agar biz ob'ektimizni ikkinchi massivning uchinchi katagiga qo'ymoqchi bo'lsak, buni shunday qilamiz:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
cats[1][2] = new Cat("Fluff");
}
[1]
ikkinchi massivga ishora qiladi va [2]
bu massivning uchinchi katagiga ishora qiladi. Ikki o'lchovli massiv bir nechta massivlardan iborat bo'lganligi sababli, uni aylanib o'tish va barcha qiymatlarni konsolga chop etish (yoki barcha katakchalarni to'ldirish) uchun bizga ikkita, ichki o'rnatilgan pastadir kerak:
for (int i = 0; i < cats.length; i++) {
for (int j = 0; j < cats[i].length; j++) {
System.out.println(cats[i][j]);
}
}
Tashqi tsiklda (o'zgaruvchi i
) biz ikki o'lchovli massivimizni tashkil etuvchi barcha massivlarni navbatma-navbat bosib o'tamiz. Ichki pastadirda (o'zgaruvchi j
) biz har bir massivning barcha hujayralarini takrorlaymiz. Natijada, cats[0][0]
konsolda birinchi bo'lib ob'ekt (birinchi massiv, birinchi katak), ikkinchi ob'ekt cats[0][1]
(birinchi massiv, ikkinchi katak) bo'ladi. Birinchi massiv tugagach, , cats[1][0]
va cats[1][1]
hokazolar cats[1][2]
chiqariladi. Aytgancha, tez ishga tushirish ikki o'lchovli massivlar uchun ham mavjud:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
numbers
Odatda, biz ikki o'lchovli massivni sifatida yozamiz int[3][3]
, lekin bu usul bizga darhol qiymatlarni ko'rsatishga imkon beradi. Nima uchun ikki o'lchovli massiv kerak bo'lishi mumkin? Xo'sh, masalan, uning yordami bilan siz mashhur "Battleship" o'yinini osongina qayta tiklashingiz mumkin: "Jang kemasi" dagi o'yin maydonining tuzilishi shundayki, uni osongina tasvirlash mumkin: 10 massiv, har biri 10 hujayradan iborat ikki o'lchovli massiv. . Siz ikkita shunday massivni yaratasiz - o'zingiz va raqibingiz uchun:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
*
Siz kemalaringiz joylashgan kataklarni ba'zi qiymatlar (masalan, raqamlar yoki belgilar) bilan to'ldirasiz , so'ngra siz va raqibingiz navbatma-navbat uyali raqamlarga qo'ng'iroq qilasiz:
- dengiz jangi[6][5]!
- O'tgan! seaBattle2[6][6]!
- Yaralangan!
- seaBattle2[6][7]!
- Yaralangan!
- seaBattle2[6][8]!,
- O'ldirilgan!
Massivlar haqida qo'shimcha manbalar
Massivlar haqida ko'proq bilmoqchimisiz? Iltimos, quyidagi maqolalarni ko'rib chiqing. Ushbu mavzu bo'yicha juda ko'p qiziqarli va foydali ma'lumotlar mavjud.- Java-dagi massivlar - massivlar, ularni yaratish, ishga tushirish va foydalanish haqida batafsil maqola. Misollar bilan.
- Arrays sinfi va undan foydalanish - maqolada sinfning ba'zi usullari tasvirlangan
Array
- Massivlar massivlarga bag'ishlangan birinchi JavaRush ma'ruzasidir.
- Ko'p o'lchovli massivlar - misollar bilan ko'p o'lchovli massivlar haqida batafsil maqola.
- Null emas, nol uzunlikdagi massivni qaytaring - Samarali dasturlash muallifi Joshua Bloch bo'sh massivlarni qanday qilib yaxshiroq qaytarish haqida gapiradi.
GO TO FULL VERSION