JavaRush /Java Blog /Random-TK /Java-da massiwler barada bir zat

Java-da massiwler barada bir zat

Toparda çap edildi
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: Java-da massiwler barada bir zat - 1Bu 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:
  1. 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.
  2. 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.
  3. 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ňJava-da massiwler barada bir zat - 2 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 Stringwe düzüjä: "7-nji indeksli öýjügi massiwde tapyň birthdayswe ş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 ibaş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:
  1. 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 massiw catsüç öýjükden ybarat bolup, olaryň hersinde bir obýekte salgylanma bar Cat. Salgylaryň her biri, şol obýektiň saklanýan ýadyndaky adresi görkezýär.
  2. 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. J cats[0]- bu blokdaky belli bir adrese.
Java-da massiwler barada bir zat - 3Bir massiwiň diňe bir zatlary saklap bilmejekdigine, özi-de bir obýektdigine düşünmek möhümdir.

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ýäris int. Bu şeýle bolar: Java-da massiwler barada bir zat - 4Her 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}};
numbersAdatç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: Java-da massiwler barada bir zat - 5“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.
  1. Java-daky massiwler - massiwler, olaryň döredilmegi, başlangyjy we ulanylyşy barada jikme-jik makala. Mysallar bilen.
  2. “Arrays” synpy we ulanylyşy - makalada synpyň käbir usullary beýan edilýärArray
  3. Toplumlar, massiwlere bagyşlanan ilkinji JavaRush leksiýasydyr.
  4. Köp ölçegli massiwler - mysallar bilen köp ölçegli massiwler barada jikme-jik makala.
  5. 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.
Bu, massiwler bilen ilkinji tanyşlygymyzy tamamlaýar, ýöne bu diňe olar bilen gatnaşyklaryň başlangyjydyr. Indiki leksiýalarda olary ulanmagyň gyzykly usullaryny göreris, şeýle hem Java-yň bu maglumat gurluşy bilen has amatly işlemek üçin içerki funksiýalarynyň bardygyny öwreneris :)
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION