Salam! Ozal türgenleşik wagtynda ýeke obýektler (ýa-da başlangyç görnüşler) bilen işleýärdik. Oneöne bir obýekt bilen däl-de, tutuş bir topar bilen işlemeli bolsa näme etmeli? Mysal üçin, kompaniýamyzdaky ähli işgärleriň doglan günleriniň sanawyny döretmek isleýäris. Onda 30 setir bolmaly: “Andreý Petrow, 25-nji ýanwar.” Hereörite maglumat gurluşy, massiw bu ýerde bize kömek eder. Eger massiwi hakyky durmuşdaky zatlar bilen deňeşdirseňiz, onuň gurluşy öýjükler bilen bank gümmezine gaty meňzeýär: Bu massiw öýjüklerden hem ybarat. Her öýjüge bir zat goýup bilersiňiz. Bu ýagdaýda mazmuna girmek üçin öýjük belgisini bilmeli. Bu massiw şeýle döredildi:
public class Main {
public static void main(String[] args) {
String [] birthdays = new String[10]; // array of Java strings
}
}
Bu ýerde 10 öýjük massiwini döretdik. Toplumyň käbir aýratynlyklaryna derrew üns berip bilersiňiz:
- Gaty kesgitlenen görnüşdäki maglumatlary saklaýar. Ilki bilen setir massiwini döreden bolsak
String
, onda başga zady saklap bilmeris. Maglumatlaryň görnüşi, massiw döredilende görkezilýär. Müşderiniň islän zadyny saklap bilýän ygtybarly goýum gutusyndan tapawutlandyrýan zat. - Bir massiw başlangyç görnüşleriň (mysal üçin
int
), setirleriň (String
) ýa-da şol bir synpyň obýektleriniň maglumatlaryny saklap bilýär. Has takygy, hatda obýektleriň özi däl, bu obýektlere baglanyşyk. - Döredilende massiwiň ululygy görkezilmelidir. Soňra kesgitläp ýa-da döredilenden soň ölçegini üýtgedip bilmersiňiz.
[]
Java , aňlatmanyň iki gapdalyndaky kwadrat ýaýlary ulanyp, bir massiwiň döredilýändigini görkezýär . Olary salgylanma üýtgeýjisiniň adyndan öň ýa-da soň kesgitläp bolýar - bu iki taraplaýyn işlär:
//Java arrays of strings, two syntaxes
String [] birthdays = new String[10];
String birthdays [] = new String[10];
Bir massiwde bir zat ýazmak isleseňiz, bahanyň ýazyljak öýjüginiň sanyny görkezmeli. Array öýjük sanlary 0-dan başlaýar. Noldan başlamak programmirlemekde adaty bir zat. Oňa näçe çalt öwrenişseňiz, şonça-da gowy :) theagny, massiwiň birinji öýjügine birneme baha goýmak isleseňiz , şeýle edilýär:
public class Main {
public static void main(String[] args) {
String birthdays [] = new String[10];
birthdays[0] = "Lena Eliseeva, March 12";
}
}
Indi kärdeşlerimiziň doglan günlerini öz içine alýan massiwimiziň birinji öýjüginde Lenanyň doglan güni bilen bir setir bar. Analogiýa boýunça başga gymmatlyklary goşup bilersiňiz:
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";
}
}
Üns beriň: Olesýanyň doglan gününi sekizinji öýjüge goşduk (7-nji öýjügiň näme üçin sekizinji bolandygyny ýatdan çykardyňyzmy?). Beýleki öýjükleriň hemmesi doldurylmasa-da. Gymmatlyklary yzygiderli tertipde ýazmak hökman däl - beýle çäklendirme ýok. Başga bir tarapdan, tertip bilen ýazsaňyz, erkin we işleýän öýjükleriň sanyny yzarlamak has aňsat bolar we massiwde “deşik” galmaz. Bank öýjügindäki ýaly massiw öýjüginiň mazmunyny almak isleseňiz, onuň belgisini bilmelisiňiz. Bu şeýle edilýär:
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 çykyşy:
Олеся Остапенко, 3 января
Üýtgeýji döretdik String
we düzüjä: "7-nji indeksli öýjügi massiwde tapyň birthdays
we şol ýerde saklanýan bahany üýtgeýjä belläň String
olesyaBirthday
" -diýdi. Edil şonuň ýaly etdi.
Java massiwiniň uzynlygy
Bir massiw bilen işleýän wagtyňyz, ýörite emläk ulanyp, onuň uzynlygyny aňsatlyk bilen bilip bilersiňiz -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 çykyşy:
10
Bellik:Gozgalmaýan emläk length
, doldurylan öýjükleriň sanyny däl-de, massiwiň ululygyny saklaýar. Biziň massiwimiz diňe 3 bahany saklaýar, ýöne ony döredenimizde, onuň üçin ululygy = 10 kesgitledik length
. Näme üçin bu peýdaly bolup biler? Mysal üçin, ähli doglan günleriň sanawyny konsola çap etmek isleseňiz (hiç kimiň ýatdan çykarylmandygyny barlamak üçin), muny ýönekeý aýlawda edip bilersiňiz:
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]);
}
}
}
Aýlawda i
başda nola deň bolan üýtgeýjini döredýäris. Her geçişde, massiwden i indeksli öýjügi alýarys we onuň bahasyny konsola çap edýäris. Aýlaw 10 gezek gaýtalanar we i bahalary 0-dan 9-a çenli ýokarlanar - diňe massiwimiziň öýjükleriniň görkezijilerine görä! birthdays[0]
Şeýlelik bilen, konsola çenli ähli bahalary çap ederis birthdays[9]
. Aslynda, massiwini başgaça döretmegiň ýollary bar. Mysal üçin, sanlar toplumy int
şeýle döredilip bilner:
public class Main {
public static void main(String[] args) {
int numbers [] = {7, 12, 8, 4, 33, 79, 1, 16, 2};
}
}
Bu usula “çalt başlangyç” diýilýär. Derrew bir massiw döredip, ony gymmatlyklar bilen doldurýandygymyz gaty amatly. Toplumyň ululygyny aç-açan kesgitlemegiň zerurlygy ýok - length
çalt başlangyç wagtynda meýdan awtomatiki usulda doldurylýar.
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 çykyşy:
9
Java Obýekt Array
Obýektleriň we primitivleriň massiwleriniň ýatda başgaça saklanýandygyny eýýäm eşitdiňiz. Mysal üçin, üç obýektiň massiwini alalyňCat
:
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 ýerde düşünmeli birnäçe zat bar:
- Ilkinjileriň ýagdaýynda Java massiwleri köp sanly bahalary (sanlar ýaly
int
) saklaýar. Obýektler bar bolsa, bir massiw köp salgylanmalary saklaýar. Bu massiwcats
üç öýjükden ybarat bolup, olaryň hersinde bir obýekte salgylanma barCat
. Salgylaryň her biri, şol obýektiň saklanýan ýadyndaky adresi görkezýär. - Array elementleri bir blokda ýatda saklanýar. Bu olara has netijeli we çalt girmek üçin edilýär. Şeýlelik bilen, baglanyşyk
cats
ähli obýektleriň - massiwiň elementleriniň saklanýan ýadyndaky bir bloky görkezýär. Jcats[0]
- bu blokdaky belli bir adrese.
Toplumlar ýa-da iki ölçegli massiw
Şundan ugur alyp, sorag bilen ýüzbe-ýüz bolýarys - mysal üçin bir setir ýa-da san däl-de, eýsem bir topar massiw döredip bilerismi? Jogap bolar - hawa, başararys! Bir massiw, içindäki beýleki obýektleri, şol sanda beýleki massiwleri saklap biler. Şeýle massiw iki ölçegli diýlip atlandyrylar. Suratda suratlandyrsaňyz, adaty tablisa gaty meňzeýär. Mysal üçin, her birinde 10 öýjük bilen 3 sany massiw saklaýan bir massiw döretmek isleýärisint
. Bu şeýle bolar: Her setir sanlaryň toplumyny görkezýär int
. Birinji massiwde 1-den 10-a çenli, ikinjisi -1-den 10-a çenli, üçünjisi - tötänleýin sanlar toplumy bar. Bu massiwleriň her biri iki ölçegli massiwiň öýjüginde saklanýar. Kodda iki ölçegli massiw başlamak şuňa meňzeýär:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
}
Iki ölçegli pişiklerimiz, hersi 5 öýjükden ybarat 3 massiw saklaýar. Obýektimizi ikinji massiwiň üçünji öýjügine goýmak islesek, muny şeýle edýäris:
public static void main(String[] args) {
Cat[][] cats = new Cat[3][5];
cats[1][2] = new Cat("Fluff");
}
[1]
ikinji massiwi görkezýär we [2]
bu massiwiň üçünji öýjügini görkezýär. Iki ölçegli massiw birnäçe massiwden ybarat bolany üçin, ony kesip geçmek we ähli bahalary konsola çap etmek (ýa-da ähli öýjükleri doldurmak) üçin goşa, öýjükli aýlaw gerek:
for (int i = 0; i < cats.length; i++) {
for (int j = 0; j < cats[i].length; j++) {
System.out.println(cats[i][j]);
}
}
Daşarky aýlawda (üýtgeýän i
), iki ölçegli massiwimizi düzýän ähli massiwleri gezelenç edýäris. Içki aýlawda (üýtgeýän j
) her massiwiň öýjükleriniň üsti bilen gaýtalaýarys. Netijede, obýekt cats[0][0]
(birinji massiw, birinji öýjük) ilki konsolda görkeziler, ikinji obýekt bolsa cats[0][1]
(birinji massiw, ikinji öýjük) görkeziler. Ilkinji massiw tükenende, cats[1][0]
we cats[1][1]
ş.m. cats[1][2]
çykar. Theeri gelende aýtsak, iki ölçegli massiwler üçin çalt başlangyç hem bar:
int[][] numbers = {{1,2,3}, {4,5,6}, {7,8,9}};
numbers
Adatça, iki ölçegli massiw ýazardyk int[3][3]
, ýöne bu usul bahalary derrew kesgitlemäge mümkinçilik berýär. Näme üçin iki ölçegli massiw gerek bolup biler? Mysal üçin, onuň kömegi bilen meşhur “Battleship” oýnuny aňsatlyk bilen döredip bilersiňiz: “Battleship” oýun meýdançasynyň gurluşy şeýle aňsat düşündirilip bilner: 10 ölçegli iki ölçegli massiw, hersi 10 öýjük . Şeýle iki sany massiw döredýärsiňiz - özüňiz we garşydaşyňyz üçin:
int [][] seaBattle = new int[10][10];
int [][] seaBattle2 = new int[10][10];
*
Gämileriňiziň ýerleşýän öýjüklerini käbir bahalar (mysal üçin, sanlar ýa-da alamatlar) bilen doldurýarsyňyz , soň bolsa siz we garşydaşyňyz öýjükli belgilere jaň edip nobatçylyk edýärler:
- deňiz söweşi [6] [5]!
- Geçmiş! deňiz söweşi2 [6] [6]!
- Uredaralananlar!
- deňiz söweşi2 [6] [7]!
- Uredaralananlar!
- deňiz söweşi2 [6] [8]!,
- Öldürildi!
Toplumlar barada goşmaça çeşmeler
Toplumlar barada has giňişleýin bilesiňiz gelýärmi? Aşakdaky makalalara göz aýlaň. Bu mowzukda köp gyzykly we peýdaly maglumatlar bar.- Java-daky massiwler - massiwler, olaryň döredilmegi, başlangyjy we ulanylyşy barada jikme-jik makala. Mysallar bilen.
- “Arrays” synpy we ulanylyşy - makalada synpyň käbir usullary beýan edilýär
Array
- Toplumlar, massiwlere bagyşlanan ilkinji JavaRush leksiýasydyr.
- Köp ölçegli massiwler - mysallar bilen köp ölçegli massiwler barada jikme-jik makala.
- Nol uzynlykdaky massiwini yzyna gaýtaryň, täsirli däl - Netijeli programmirleme ýazyjysy Joşua Bloch boş massiwleri nädip has gowy yzyna gaýtarmalydygy barada gürrüň berýär.
GO TO FULL VERSION