JAVA CIKLAI
Java for-each ciklas
for-each ciklas nuosekliai pereina visus masyvo arba kitos
Kada naudojamas for-each?
Šis ciklas tinka, kai kiekvieną duomenų rinkinio elementą reikia perskaityti ta pačia tvarka ir nėra svarbi jo pozicija. Dėl trumpesnės sintaksės kodas dažnai tampa aiškesnis nei naudojant įprastą for su sąlyga i < masyvas.length.
for-each sintaksė
for (elementoTipas elementas : duomenuRinkinys) {
// Kodas vykdomas kiekvienam elementui
}Jis tik parodo vietas, kuriose reikia įrašyti tikrą elemento tipą, jo pavadinimą ir duomenų rinkinį.
- Elemento tipas turi atitikti duomenų rinkinyje saugomų reikšmių tipą.
- Elemento kintamasis per kiekvieną iteraciją gauna kitą rinkinio reikšmę.
- Duomenų rinkinys gali būti masyvas arba, pavyzdžiui, Java kolekcija.
- Ženklas
:skaitomas kaip „kiekvienam elementui iš rinkinio“.
Tekstų masyvo perėjimas
Turime tris vaisius. for-each ciklas paima juos po vieną ir parodo konsolėje:
String[] vaisiai = {"Obuolys", "Kriaušė", "Bananas"};
for (String vaisius : vaisiai) {
System.out.println("Vaisius: " + vaisius);
}Vaisius: Obuolys
Vaisius: Kriaušė
Vaisius: Bananas
Masyvas vaisiaiyra tarsi viena lentyna su trimis dėžutėmis: obuoliu, kriauše ir bananu.- Pirmą kartą ciklo kintamasis
vaisiusgauna tekstą Obuolys. - Antrą kartą jis gauna Kriaušė, o trečią – Bananas.
- Kiekvieną gautą reikšmę
println()parodo atskiroje konsolės eilutėje. - Po paskutinio vaisiaus ciklas baigiasi automatiškai. Mums nereikia patiems didinti skaitiklio.
Skaičių apdorojimas
Jonas nusipirko keturis paprastus produktus. Jų kainas galima sudėti naudojant for-each:
int[] kainos = {2, 3, 5, 4};
int bendraKaina = 0;
for (int kaina : kainos) {
bendraKaina += kaina;
}
System.out.println("Bendra kaina: " + bendraKaina + " eurų");Bendra kaina: 14 eurų
- Masyve
kainossaugomos keturios kainos:2, 3, 5, 4. - Kintamasis
bendraKainapradžioje yra0, nes dar nieko nesudėjome. - Per kiekvieną kartojimą kintamasis
kainagauna vieną masyvo skaičių. - Komanda
bendraKaina += kainaprideda tą skaičių prie ankstesnės sumos. Ji auga taip:2, 5, 10, 14. - Pasibaigus ciklui, konsolėje parodoma galutinė suma – 14 eurų.
for ir for-each palyginimas
String[] vardai = {"Jonas", "Ona", "Rūta"};
// Įprastas for: turime indeksą
for (int i = 0; i < vardai.length; i++) {
System.out.println("Indeksas " + i + ": " + vardai[i]);
}
// for-each: tiesiogiai gauname elementą
for (String vardas : vardai) {
System.out.println("Vardas: " + vardas);
}Indeksas 0: Jonas
Indeksas 1: Ona
Indeksas 2: Rūta
Vardas: Jonas
Vardas: Ona
Vardas: Rūta
- Abu ciklai pereina tą patį vardų masyvą ir mato Joną, Oną bei Rūtą.
- Įprastas
forturi skaitiklįi, todėl gali parodyti ir vardą, ir jo indeksą. - Masyvo indeksai prasideda nuo
0, todėl Jono indeksas yra 0, Onos – 1, o Rūtos – 2. for-eachtiesiogiai gauna kiekvieną vardą, todėl jo kodas trumpesnis, tačiau indekso neturi.- Jeigu reikia tik perskaityti visus vardus, paprastesnis
for-eachdažniausiai yra aiškesnis.
| Poreikis | Tinkamesnis ciklas |
|---|---|
| Perskaityti visus elementus iš eilės | for-each |
| Naudoti elemento indeksą | for |
| Pereiti tik dalį masyvo | for |
| Pereiti elementus kitu žingsniu ar atbulai | for |
Svarbūs for-each ribojimai
for-each tiesiogiai nepateikia dabartinio elemento indekso. Be to, primityviojo tipo ciklo kintamajam priskyrus kitą reikšmę, pats masyvo elementas nepasikeičia:
int[] taskai = {10, 20, 30};
for (int taskas : taskai) {
taskas *= 2;
}
System.out.println(taskai[0]);10
- Masyve saugomos trys tikrosios reikšmės:
10, 20, 30. - Per kiekvieną kartojimą
taskasgauna vienos reikšmės kopiją. - Komanda
taskas *= 2padvigubina tik šią laikiną kopiją. - Originali masyvo dėžutė nekeičiama, todėl pirmasis elementas ir toliau yra
10. - Dėl to
System.out.println(taskai[0])konsolėje parodo 10, o ne 20.
taskas gauna reikšmės kopiją.Jei reikia pakeisti konkrečius primityviųjų reikšmių masyvo elementus, naudok įprastą for ir indeksą.

