KODO STRUKTŪRA

Java masyvai

Masyvas leidžia viename kintamajame saugoti kelias to paties tipo reikšmes. Užuot kūrę atskirą kintamąjį kiekvienam elementui, galime juos sudėti į vieną sunumeruotą duomenų rinkinį.

Masyvo deklaravimas

Masyvo tipas žymimas laužtiniais skliaustais [] po elemento tipo:

String[] vaisiai;
int[] temperaturos;
Konsolės rezultato nėra.

Šios eilutės tik paskelbia du masyvų kintamuosius. Jos nieko nespausdina ir dar nesukuria pačių masyvų.

  1. String[] reiškia „tekstų masyvas“ – vieta, kurioje vėliau galėsime laikyti kelis tekstus.
  2. vaisiai yra šio būsimo masyvo pavadinimas.
  3. int[] reiškia „sveikųjų skaičių masyvas“.
  4. temperaturos bus skaičių masyvo pavadinimas.
  5. Kol nepriskiriame reikšmių arba nenaudojame , turime tik pavadinimus, bet ne paruoštas sunumeruotas dėžutes.

Masyvas su pradinėmis reikšmėmis

Jei reikšmės jau žinomos, jas galima išvardyti tarp riestinių skliaustų ir atskirti kableliais:

String[] vaisiai = {
    "Obuolys",
    "Kriaušė",
    "Bananas",
    "Apelsinas"
};

int[] temperaturos = {18, 20, 22, 19};
Konsolės rezultato nėra.

Masyvai jau sukurti ir užpildyti, tačiau kode nėra println(), todėl konsolėje niekas nepasirodo.

  1. Masyvas vaisiai vienu pavadinimu saugo keturis skirtingus tekstus.
  2. Riestiniai skliaustai { } apgaubia pradines reikšmes, o kableliai jas atskiria.
  3. Visos vaisiai reikšmės yra tekstai, nes masyvo tipas yra String[].
  4. Masyvas temperaturos saugo keturis sveikuosius skaičius, nes jo tipas yra int[].
Viename masyve saugomos vieno tipo reikšmės.

String[] saugo tekstus, o int[] – sveikuosius skaičius.

Elementų pasiekimas pagal indeksą

Kiekvienas elementas turi indeksą. Java masyvų indeksai prasideda nuo 0:

String[] vaisiai = {
    "Obuolys", "Kriaušė", "Bananas", "Apelsinas"
};

System.out.println(vaisiai[0]);
System.out.println(vaisiai[2]);
Konsolės rezultatas

Obuolys
Bananas

  1. Įsivaizduok keturias sunumeruotas vaisių dėžutes.
  2. Java pirmąją dėžutę numeruoja ne 1, o 0, todėl vaisiai[0] yra Obuolys.
  3. Indeksas 1 priklauso kriaušei, o indeksas 2 – bananui.
  4. Todėl antroji println() eilutė su vaisiai[2] parodo Bananas.
Vaisių masyvo indeksai
IndeksasElementas
0Obuolys
1Kriaušė
2Bananas
3Apelsinas

Masyvo elemento keitimas

Nauja reikšmė konkrečiam elementui priskiriama nurodžius jo indeksą:

String[] pirkiniai = {"Duona", "Pienas", "Sūris"};

pirkiniai[1] = "Sultys";

System.out.println(pirkiniai[1]);
Konsolės rezultatas

Sultys

  1. Pirkinių masyve pradžioje yra duona, pienas ir sūris.
  2. Indeksas 1 nurodo antrąją vietą, kurioje saugomas pienas.
  3. Komanda pirkiniai[1] = "Sultys" išima seną reikšmę ir į tą pačią vietą įrašo naują.
  4. Todėl išspausdinus antrąjį elementą konsolėje matome Sultys.

Masyvo ilgis

Savybė length grąžina masyvo elementų skaičių. Tai yra savybė, todėl po jos nerašomi skliaustai. Paskutinio elemento indeksas visada yra length - 1.

int[] temperaturos = {18, 20, 22, 19};

System.out.println(temperaturos.length);
System.out.println(temperaturos[temperaturos.length - 1]);
Konsolės rezultatas

4
19

  1. Masyve saugomos keturios temperatūros, todėl temperaturos.length grąžina 4.
  2. Indeksai prasideda nuo nulio, taigi keturių elementų indeksai yra 0, 1, 2, 3.
  3. Iš length atėmę vienetą gauname paskutinio elemento indeksą: 4 - 1 = 3.
  4. Indeksu 3 saugoma temperatūra yra 19, todėl ji rodoma antroje konsolės eilutėje.

Masyvo kūrimas su new

Kai žinomas reikalingas dydis, bet reikšmės bus įrašytos vėliau, masyvas kuriamas su new ir vietų skaičiumi:

String[] vardai = new String[3];

vardai[0] = "Jonas";
vardai[1] = "Ona";
vardai[2] = "Rūta";

System.out.println(vardai[0]);
Konsolės rezultatas

Jonas

  1. new String[3] sukuria tris tuščias vietas tekstams.
  2. Jų indeksai yra 0, 1, 2.
  3. Į pirmą vietą įrašomas Jonas, į antrą – Ona, o į trečią – Rūta.
  4. vardai[0] pasiekia pirmąją vietą, todėl konsolėje parodomas Jonas.
  5. Masyvo dydis nustatomas jį kuriant ir vėliau nebegali būti pakeistas.

Dvi lygiavertės inicializavimo formos

// Pilna forma su new
String[] miestai = new String[] {"Vilnius", "Kaunas", "Klaipėda"};

// Trumpesnė ir dažniausiai naudojama forma
String[] miestai2 = {"Vilnius", "Kaunas", "Klaipėda"};
Konsolės rezultato nėra.

Abi eilutės sukuria vienodus miestų masyvus, tačiau nė viena jų nekviečia println().

  1. Pirmoji forma aiškiai naudoja new String[] ir tada pateikia reikšmes.
  2. Antroji forma yra trumpesnė. Java pati supranta, kad reikia sukurti String masyvą.
  3. Abiejuose masyvuose elementai ir jų tvarka yra vienodi.
  4. Kai reikšmes žinome iš karto, dažniausiai pasirenkama trumpesnė forma.
Nurodyk dydį arba reikšmes, bet ne abu kartu.

new String[3] sukuria tuščią masyvą, o new String[] {...} sukuria masyvą iš pateiktų reikšmių.

Numatytosios reikšmės

Su new sukurtos, bet dar neužpildytos masyvo vietos gauna reikšmes:

int[] taskai = new int[3];
boolean[] patikrinta = new boolean[3];
String[] pranesimai = new String[3];

System.out.println(taskai[0]);
System.out.println(patikrinta[0]);
System.out.println(pranesimai[0]);
Konsolės rezultatas

0
false
null

  1. Visi trys masyvai sukurti su new, tačiau konkrečių reikšmių į juos dar neįrašėme.
  2. Tuščia int masyvo vieta automatiškai gauna skaičių 0.
  3. Tuščia boolean vieta gauna false.
  4. Tuščia String vieta gauna null. Tai reiškia, kad joje kol kas nėra jokio teksto objekto.
  5. Šias pradines reikšmes Java suteikia pati.

Indeksas už masyvo ribų

Bandymas pasiekti neegzistuojantį indeksą sukelia vykdymo klaidą:

String[] vardai = {"Jonas", "Ona", "Rūta"};

System.out.println(vardai[3]);
Programos rezultatas – vykdymo klaida

ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3

  1. Vardų masyve yra trys elementai, todėl jo ilgis yra 3.
  2. Tačiau galiojantys indeksai yra 0, 1, 2, nes Java pradeda skaičiuoti nuo nulio.
  3. Indeksas 3 reikštų ketvirtą elementą, o tokios vietos šiame masyve nėra.
  4. Kodas sėkmingai sukompiliuojamas, bet vykdymo metu Java aptinka neteisingą indeksą ir sustabdo programą.
  5. Todėl vietoje įprastos konsolės išvesties gauname ArrayIndexOutOfBoundsException.