JAVA CIKLAI

Java while ciklas

while kartoja kodo bloką tol, kol nurodyta sąlyga yra teisinga. Jis ypač naudingas, kai iš anksto nežinoma, kiek kartų veiksmą reikės pakartoti.

Kodėl naudojami ciklai?

Ciklas leidžia vieną kartą parašytą veiksmą vykdyti daug kartų. Tai sumažina pasikartojančio kodo kiekį, palengvina jo keitimą ir padeda išvengti kopijavimo klaidų.

while prieš kiekvieną iteraciją patikrina boolean sąlygą. Kai jos rezultatas tampa false, ciklas baigiamas ir programa tęsia darbą po jo.

while sintaksė

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

Jis tik parodo, kur reikia įrašyti tikrą sąlygą ir kartojamas Java instrukcijas.

  1. Java pirmiausia patikrina skliaustuose parašytą sąlygą.
  2. Jeigu sąlyga yra true, vykdomas kodas tarp riestinių skliaustų.
  3. Pasiekusi bloko pabaigą, Java grįžta į viršų ir vėl patikrina sąlygą.
  4. Kai sąlyga tampa false, ciklas sustoja ir programa tęsiasi po juo.
  5. Ciklo viduje turi pasikeisti sąlygai svarbi reikšmė, kitaip kartojimas gali niekada nesibaigti.

Sausainių dėžutės pavyzdys

Jonas valgo sausainius po vieną, kol dėžutė ištuštėja:

int sausainiai = 3;

while (sausainiai > 0) {
    System.out.println("Dėžutėje liko sausainių: " + sausainiai);
    sausainiai--;
}

System.out.println("Sausainių nebeliko");
Konsolės rezultatas

Dėžutėje liko sausainių: 3
Dėžutėje liko sausainių: 2
Dėžutėje liko sausainių: 1
Sausainių nebeliko

  1. Pradžioje kintamasis sausainiai saugo skaičių 3.
  2. Java patikrina sausainiai > 0. Kadangi 3 > 0, ciklo blokas vykdomas.
  3. Konsolėje parodomas dabartinis skaičius, o sausainiai-- jį sumažina vienetu.
  4. Tas pats pakartojama su reikšmėmis 2 ir 1.
  5. Kai reikšmė tampa 0, Java išeina iš ciklo ir parodo Sausainių nebeliko.

Ciklas su keliomis sąlygomis

Ona plauna indus tol, kol yra neplautų indų ir namuose yra vandens:

int neplautiIndai = 3;
boolean yraVandens = true;

while (neplautiIndai > 0 && yraVandens) {
    System.out.println("Plaunamas indas");
    neplautiIndai--;
}

System.out.println("Indai išplauti");
Konsolės rezultatas

Plaunamas indas
Plaunamas indas
Plaunamas indas
Indai išplauti

  1. Pradžioje yra 3 neplauti indai, o yraVandens reikšmė yra true.
  2. Operatorius && reiškia „ir“, todėl abi sąlygos turi būti teisingos.
  3. Per kiekvieną kartojimą išplaunamas vienas indas ir neplautiIndai-- sumažina jų skaičių.
  4. Blokas įvykdomas tris kartus, todėl tekstas Plaunamas indas pasirodo tris kartus.
  5. Kai neplautų indų lieka 0, ciklas baigiasi ir parodoma Indai išplauti.
Kas būtų, jeigu nebūtų vandens?

Jei yraVandens būtų false, ciklas neprasidėtų, net jeigu kriauklėje dar būtų neplautų indų.

Kai pradinė sąlyga yra klaidinga

Kadangi while sąlygą tikrina prieš vykdydamas bloką, ciklas gali neįvykti nė vieno karto:

int laisvosVietos = 0;

while (laisvosVietos > 0) {
    System.out.println("Registruojamas dalyvis");
    laisvosVietos--;
}

System.out.println("Registracija nepradėta");
Konsolės rezultatas

Registracija nepradėta

  1. Kintamasis laisvosVietos nuo pat pradžių yra 0.
  2. Java prieš pirmą kartojimą patikrina laisvosVietos > 0.
  3. Palyginimas 0 > 0 yra false, todėl registravimo blokas praleidžiamas.
  4. Programa tęsiasi po ciklo ir konsolėje parodo Registracija nepradėta.
  5. Jei blokas privalo įvykti bent kartą prieš tikrinant sąlygą, naudojamas do while.

Begalinio ciklo pavojus

Jei sąlyga niekada netampa klaidinga, ciklas nesibaigia:

int sausainiai = 3;

// Klaida: sausainių skaičius ciklo viduje nesikeičia
while (sausainiai > 0) {
    System.out.println("Liko sausainių: " + sausainiai);
}
Konsolės rezultatas kartojamas be pabaigos

Liko sausainių: 3
Liko sausainių: 3
Liko sausainių: 3
…

  1. Pradinė reikšmė yra 3, todėl sąlyga sausainiai > 0 yra teisinga.
  2. Ciklas parodo tekstą, tačiau niekur nesumažina kintamojo sausainiai.
  3. Kitą kartą reikšmė vis dar yra 3, todėl sąlyga vėl teisinga.
  4. Programa kartoja tą pačią eilutę tol, kol ją priverstinai sustabdome.
  5. Pridėjus sausainiai--, skaičius mažėtų ir ciklas galėtų normaliai pasibaigti.
Patikrink, kas pakeičia ciklo sąlygą.

Šiame pavyzdyje reikia mažinti sausainiai arba numatyti aiškią išėjimo sąlygą, pavyzdžiui, naudojant break.