JAVA CIKLAI

Java for ciklas

for ciklas patogus, kai iš anksto žinai kartojimų skaičių arba nori nuosekliai keisti skaitiklį. Visa ciklo valdymo informacija pateikiama vienoje eilutėje.

for ciklo sintaksė

for (inicializavimas; sąlyga; pakeitimas) {
    // Kartojamas kodo blokas
}
Šis sintaksės šablonas konsolės rezultato neturi.

Jis tik parodo tris vietas, kuriose reikia įrašyti tikrą skaitiklį, sąlygą ir jo pakeitimą.

Trys for ciklo valdymo dalys
DalisKada vykdoma?Paskirtis
InicializavimasVieną kartą prieš cikląSukuria arba nustato skaitiklį
SąlygaPrieš kiekvieną iteracijąNusprendžia, ar vykdyti bloką
PakeitimasPo kiekvienos iteracijosPakeičia skaitiklio reikšmę
  1. Inicializavimas paruošia skaitiklį. Pavyzdžiui, int diena = 1.
  2. Sąlyga prieš kiekvieną kartojimą paklausia, ar ciklas dar gali tęstis.
  3. Jeigu sąlyga yra true, Java įvykdo kodą tarp riestinių skliaustų.
  4. Pakeitimas atnaujina skaitiklį, o tada sąlyga tikrinama iš naujo.

Keturių dienų skaičiavimas

Įsivaizduok, kad norime sunumeruoti keturias dienas:

for (int diena = 1; diena <= 4; diena++) {
    System.out.println("Diena: " + diena);
}
Konsolės rezultatas

Diena: 1
Diena: 2
Diena: 3
Diena: 4

  1. Prieš prasidedant ciklui sukuriamas skaitiklis diena, kurio pradinė reikšmė yra 1.
  2. Java patikrina diena <= 4. Pirmą kartą tikrinama 1 <= 4, todėl sąlyga teisinga.
  3. Konsolėje parodoma dabartinė dienos reikšmė.
  4. diena++ prideda vienetą, todėl kitą kartą skaitiklio reikšmė yra 2.
  5. Tai kartojama iki dienos 4. Kai skaitiklis tampa 5, sąlyga 5 <= 4 yra klaidinga ir ciklas baigiasi.

Skaitiklis gali keistis ne tik vienetu

Šis ciklas išvardija vienoje gatvės pusėje esančius porinius namų numerius:

for (int namoNumeris = 2; namoNumeris <= 10; namoNumeris += 2) {
    System.out.println("Namo numeris: " + namoNumeris);
}
Konsolės rezultatas

Namo numeris: 2
Namo numeris: 4
Namo numeris: 6
Namo numeris: 8
Namo numeris: 10

  1. Skaitiklis namoNumeris prasideda nuo pirmojo porinio skaičiaus 2.
  2. Po kiekvieno parodyto numerio komanda namoNumeris += 2 prideda du.
  3. Todėl skaitiklis juda taip: 2, 4, 6, 8, 10 ir neprisiliečia prie nelyginių skaičių.
  4. Po 10 skaitiklis tampa 12. Sąlyga 12 <= 10 klaidinga, todėl ciklas sustoja.

Rezultato kaupimas cikle

Ona penkias dienas kasdien perskaito po 10 knygos puslapių. Ciklas gali suskaičiuoti jų bendrą skaičių:

int perskaitytaPuslapiu = 0;

for (int diena = 1; diena <= 5; diena++) {
    perskaitytaPuslapiu += 10;
}

System.out.println("Perskaityta puslapių: " + perskaitytaPuslapiu);
Konsolės rezultatas

Perskaityta puslapių: 50

  1. Pradžioje perskaitytaPuslapiu yra 0, nes Ona dar nepradėjo skaityti.
  2. Ciklas vykdomas penkis kartus – po vieną kartą kiekvienai dienai.
  3. Per kiekvieną kartojimą += 10 prie ankstesnio rezultato prideda dar 10 puslapių.
  4. Reikšmė auga taip: 10, 20, 30, 40, 50.
  5. Ciklui pasibaigus, println() parodo galutinę sukauptą reikšmę 50.

Mažėjantis skaitiklis

Jonas iš automobilio turi parnešti keturis pirkinių maišelius. Skaitiklis gali mažėti naudojant --:

for (int maiseliai = 4; maiseliai >= 1; maiseliai--) {
    System.out.println("Automobilyje liko maišelių: " + maiseliai);
}

System.out.println("Visi pirkiniai parnešti");
Konsolės rezultatas

Automobilyje liko maišelių: 4
Automobilyje liko maišelių: 3
Automobilyje liko maišelių: 2
Automobilyje liko maišelių: 1
Visi pirkiniai parnešti

  1. Skaitiklio pradinė reikšmė yra 4, nes automobilyje yra keturi maišeliai.
  2. Po kiekvieno kartojimo maiseliai-- sumažina skaitiklį vienetu.
  3. Konsolėje paeiliui parodomos reikšmės 4, 3, 2, 1.
  4. Kai skaitiklis tampa 0, sąlyga maiseliai >= 1 tampa klaidinga ir ciklas baigiasi.
  5. Java tęsia programą po ciklo ir parodo tekstą Visi pirkiniai parnešti.

Kai sąlyga klaidinga nuo pradžių

Programa turi laistyti gėles tik nuo pirmos iki penktos dienos, tačiau skaitiklis klaidingai pradėtas nuo aštuntos:

for (int diena = 8; diena <= 5; diena++) {
    System.out.println("Laistome gėles");
}
Konsolės rezultatas

Nieko neišvedama

  1. Skaitiklis diena iš karto gauna reikšmę 8.
  2. Dar prieš pirmą kartojimą Java patikrina sąlygą 8 <= 5.
  3. Atsakymas yra false, todėl ciklo viduje esantis println() neįvykdomas nė karto.
  4. Dėl to konsolė lieka tuščia. Tai nėra klaida – ciklas tiesiog neturėjo nė vieno tinkamo kartojimo.

for ar while?

Rinkis for, kai kartojimus natūraliai valdo skaitiklis arba jų skaičius žinomas. while dažniausiai aiškesnis, kai kartojimų skaičius nežinomas ir ciklas priklauso nuo besikeičiančios programos būsenos.