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;Šios eilutės tik paskelbia du masyvų kintamuosius. Jos nieko nespausdina ir dar nesukuria pačių masyvų.
String[]reiškia „tekstų masyvas“ – vieta, kurioje vėliau galėsime laikyti kelis tekstus.vaisiaiyra šio būsimo masyvo pavadinimas.int[]reiškia „sveikųjų skaičių masyvas“.temperaturosbus skaičių masyvo pavadinimas.- Kol nepriskiriame reikšmių arba nenaudojame
new , 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};Masyvai jau sukurti ir užpildyti, tačiau kode nėra println(), todėl konsolėje niekas nepasirodo.
- Masyvas
vaisiaivienu pavadinimu saugo keturis skirtingus tekstus. - Riestiniai skliaustai
{ }apgaubia pradines reikšmes, o kableliai jas atskiria. - Visos
vaisiaireikšmės yra tekstai, nes masyvo tipas yraString[]. - Masyvas
temperaturossaugo keturis sveikuosius skaičius, nes jo tipas yraint[].
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]);Obuolys
Bananas
- Įsivaizduok keturias sunumeruotas vaisių dėžutes.
- Java pirmąją dėžutę numeruoja ne
1, o0, todėlvaisiai[0]yra Obuolys. - Indeksas
1priklauso kriaušei, o indeksas2– bananui. - Todėl antroji
println()eilutė suvaisiai[2]parodo Bananas.
| Indeksas | Elementas |
|---|---|
| 0 | Obuolys |
| 1 | Kriaušė |
| 2 | Bananas |
| 3 | Apelsinas |
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]);Sultys
- Pirkinių masyve pradžioje yra duona, pienas ir sūris.
- Indeksas
1nurodo antrąją vietą, kurioje saugomas pienas. - Komanda
pirkiniai[1] = "Sultys"išima seną reikšmę ir į tą pačią vietą įrašo naują. - 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]);4
19
- Masyve saugomos keturios temperatūros, todėl
temperaturos.lengthgrąžina4. - Indeksai prasideda nuo nulio, taigi keturių elementų indeksai yra
0, 1, 2, 3. - Iš
lengthatėmę vienetą gauname paskutinio elemento indeksą:4 - 1 = 3. - Indeksu
3saugoma temperatūra yra19, 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]);Jonas
new String[3]sukuria tris tuščias vietas tekstams.- Jų indeksai yra
0, 1, 2. - Į pirmą vietą įrašomas Jonas, į antrą – Ona, o į trečią – Rūta.
vardai[0]pasiekia pirmąją vietą, todėl konsolėje parodomas Jonas.- 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"};Abi eilutės sukuria vienodus miestų masyvus, tačiau nė viena jų nekviečia println().
- Pirmoji forma aiškiai naudoja
new String[]ir tada pateikia reikšmes. - Antroji forma yra trumpesnė. Java pati supranta, kad reikia sukurti
Stringmasyvą. - Abiejuose masyvuose elementai ir jų tvarka yra vienodi.
- Kai reikšmes žinome iš karto, dažniausiai pasirenkama trumpesnė forma.
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
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]);0
false
null
- Visi trys masyvai sukurti su
new, tačiau konkrečių reikšmių į juos dar neįrašėme. - Tuščia
intmasyvo vieta automatiškai gauna skaičių0. - Tuščia
booleanvieta gaunafalse. - Tuščia
Stringvieta gaunanull. Tai reiškia, kad joje kol kas nėra jokio teksto objekto. - Š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]);ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
- Vardų masyve yra trys elementai, todėl jo ilgis yra
3. - Tačiau galiojantys indeksai yra
0, 1, 2, nes Java pradeda skaičiuoti nuo nulio. - Indeksas
3reikštų ketvirtą elementą, o tokios vietos šiame masyve nėra. - Kodas sėkmingai sukompiliuojamas, bet vykdymo metu Java aptinka neteisingą indeksą ir sustabdo programą.
- Todėl vietoje įprastos konsolės išvesties gauname
ArrayIndexOutOfBoundsException.

