KODO STRUKTŪRA

Java masyvų elementų perėjimas ciklais

Ciklai leidžia nuosekliai apdoroti kiekvieną masyvo elementą. Įprastas for suteikia elemento indeksą, o for-each leidžia patogiai dirbti tiesiogiai su reikšmėmis.

Masyvo perėjimas su for

Skaitiklis pradedamas nuo 0, nes toks yra pirmojo elemento indeksas. Sąlygoje naudojama length, todėl ciklas sustoja prieš pasiekdamas neegzistuojantį indeksą.

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

for (int i = 0; i < vaisiai.length; i++) {
    System.out.println(vaisiai[i]);
}
Konsolės rezultatas

Obuolys
Kriaušė
Bananas
Apelsinas

  1. Masyve vaisiai yra keturi elementai, todėl jo length reikšmė yra 4.
  2. Skaitiklis i prasideda nuo 0, nes tai yra pirmojo masyvo elemento indeksas.
  3. vaisiai[i] kiekvieną kartą pasiekia kitą elementą: indeksus 0, 1, 2, 3.
  4. println() kiekvieną vaisių parodo naujoje konsolės eilutėje.
  5. Kai i tampa 4, sąlyga 4 < 4 yra klaidinga ir ciklas baigiasi.
Naudok sąlygą i < masyvas.length.

Paskutinio elemento indeksas yra length - 1, todėl operatorius <= sukeltų indekso ribų klaidą.

Skaitinių elementų skaitymas

Ta pati ciklo struktūra gali parodyti keturių dienų temperatūras:

int[] temperaturos = {21, 24, 19, 27};

for (int i = 0; i < temperaturos.length; i++) {
    System.out.println("Temperatūra: " + temperaturos[i] + " °C");
}
Konsolės rezultatas

Temperatūra: 21 °C
Temperatūra: 24 °C
Temperatūra: 19 °C
Temperatūra: 27 °C

  1. Masyvas temperaturos saugo keturis sveikuosius skaičius.
  2. Ciklas paeiliui naudoja indeksus nuo 0 iki 3.
  3. Per kiekvieną kartojimą temperaturos[i] grąžina vienos dienos temperatūrą.
  4. Java sujungia tekstą, skaičių ir simbolį °C, tada parodo visą eilutę konsolėje.

Masyvo elementų sumos skaičiavimas

Jonas turi keturis pirkinius. Kintamasis už ciklo ribų gali sukaupti bendrą jų kainą:

int[] kainos = {3, 4, 2, 5};
int bendraKaina = 0;

for (int i = 0; i < kainos.length; i++) {
    bendraKaina += kainos[i];
}

System.out.println("Bendra kaina: " + bendraKaina + " eurų");
Konsolės rezultatas

Bendra kaina: 14 eurų

  1. Masyve kainos saugomos reikšmės 3, 4, 2, 5.
  2. Kintamasis bendraKaina pradžioje yra 0.
  3. Per kiekvieną kartojimą kainos[i] paima kitą kainą.
  4. bendraKaina += kainos[i] ją prideda prie ankstesnės sumos. Suma auga taip: 3, 7, 9, 14.
  5. Pasibaigus ciklui, konsolėje parodoma galutinė suma 14 eurų.

Masyvo perėjimas su for-each

Kai reikalingos tik elementų reikšmės, galima atsisakyti skaitiklio ir indekso:

for (elementoTipas elementas : masyvas) {
    // Veiksmas su elementu
}
Šis sintaksės šablonas konsolės rezultato neturi.

Jis tik parodo vietas, kuriose reikia įrašyti elemento tipą, pavadinimą ir tikrą masyvą.

Dvitaškį galima skaityti kaip „kiekvienam elementui iš masyvo“:

String[] miestai = {"Vilnius", "Kaunas", "Klaipėda"};

for (String miestas : miestai) {
    System.out.println("Miestas: " + miestas);
}
Konsolės rezultatas

Miestas: Vilnius
Miestas: Kaunas
Miestas: Klaipėda

  1. Masyvas miestai saugo tris Lietuvos miestų pavadinimus.
  2. Pirmą kartą kintamasis miestas gauna reikšmę Vilnius.
  3. Kitais kartais jis gauna Kaunas ir Klaipėda.
  4. for-each pats sustoja po paskutinio elemento, todėl nereikia rašyti indekso ar length.

Kai reikalingas elemento indeksas

for-each nepateikia dabartinės pozicijos. Jei reikia išvesti vietos numerį arba kitaip naudoti indeksą, rinkis įprastą for:

String[] vardai = {"Asta", "Mantas", "Ona", "Darius"};

for (int i = 0; i < vardai.length; i++) {
    System.out.println("Numeris " + (i + 1) + ": " + vardai[i]);
}
Konsolės rezultatas

Numeris 1: Asta
Numeris 2: Mantas
Numeris 3: Ona
Numeris 4: Darius

  1. Java techniniai indeksai yra 0, 1, 2, 3.
  2. Žmonėms sąrašus įprasta numeruoti nuo 1, todėl rodomam numeriui apskaičiuoti naudojame i + 1.
  3. Kai i yra 0, vartotojui parodomas numeris 1 ir pirmasis vardas Asta.
  4. Taip vienu metu galime naudoti ir elemento poziciją, ir jo reikšmę.

Masyvo elementų keitimas cikle

Trijų dienų žingsnių skaičius užrašytas tūkstančiais. Norint reikšmes paversti tikrais skaičiais, reikalingas jų indeksas:

int[] zingsniaiTukstanciais = {2, 4, 6};

for (int i = 0; i < zingsniaiTukstanciais.length; i++) {
    zingsniaiTukstanciais[i] *= 1000;
}

for (int zingsniai : zingsniaiTukstanciais) {
    System.out.println(zingsniai);
}
Konsolės rezultatas

2000
4000
6000

  1. Pradinis masyvas saugo reikšmes 2, 4, 6, kurios reiškia tūkstančius žingsnių.
  2. Pirmasis for ciklas kiekvieną elementą pasiekia per jo indeksą.
  3. Komanda zingsniaiTukstanciais[i] *= 1000 tikrąjį masyvo elementą padaugina iš tūkstančio.
  4. Po pirmojo ciklo masyve jau saugomos reikšmės 2000, 4000, 6000.
  5. Antrasis, for-each, ciklas šias pakeistas reikšmes parodo konsolėje.

Kurį ciklą pasirinkti?

for ir for-each naudojimas su masyvais
UžduotisRekomenduojamas ciklas
Perskaityti visus elementusfor-each
Gauti elemento indeksąfor
Pakeisti elementą pagal jo vietąfor
Pereiti masyvą atbulai arba kitu žingsniufor
Susumuoti visas reikšmesAbu tinka