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
}Jis tik parodo, kur reikia įrašyti tikrą sąlygą ir kartojamas Java instrukcijas.
- Java pirmiausia patikrina skliaustuose parašytą sąlygą.
- Jeigu sąlyga yra
true, vykdomas kodas tarp riestinių skliaustų. - Pasiekusi bloko pabaigą, Java grįžta į viršų ir vėl patikrina sąlygą.
- Kai sąlyga tampa
false, ciklas sustoja ir programa tęsiasi po juo. - 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");Dėžutėje liko sausainių: 3
Dėžutėje liko sausainių: 2
Dėžutėje liko sausainių: 1
Sausainių nebeliko
- Pradžioje kintamasis
sausainiaisaugo skaičių3. - Java patikrina
sausainiai > 0. Kadangi3 > 0, ciklo blokas vykdomas. - Konsolėje parodomas dabartinis skaičius, o
sausainiai--jį sumažina vienetu. - Tas pats pakartojama su reikšmėmis
2ir1. - 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");Plaunamas indas
Plaunamas indas
Plaunamas indas
Indai išplauti
- Pradžioje yra
3neplauti indai, oyraVandensreikšmė yratrue. - Operatorius
&&reiškia „ir“, todėl abi sąlygos turi būti teisingos. - Per kiekvieną kartojimą išplaunamas vienas indas ir
neplautiIndai--sumažina jų skaičių. - Blokas įvykdomas tris kartus, todėl tekstas Plaunamas indas pasirodo tris kartus.
- Kai neplautų indų lieka
0, ciklas baigiasi ir parodoma Indai išplauti.
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");Registracija nepradėta
- Kintamasis
laisvosVietosnuo pat pradžių yra0. - Java prieš pirmą kartojimą patikrina
laisvosVietos > 0. - Palyginimas
0 > 0yrafalse, todėl registravimo blokas praleidžiamas. - Programa tęsiasi po ciklo ir konsolėje parodo Registracija nepradėta.
- 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);
}Liko sausainių: 3
Liko sausainių: 3
Liko sausainių: 3
…
- Pradinė reikšmė yra
3, todėl sąlygasausainiai > 0yra teisinga. - Ciklas parodo tekstą, tačiau niekur nesumažina kintamojo
sausainiai. - Kitą kartą reikšmė vis dar yra
3, todėl sąlyga vėl teisinga. - Programa kartoja tą pačią eilutę tol, kol ją priverstinai sustabdome.
- Pridėjus
sausainiai--, skaičius mažėtų ir ciklas galėtų normaliai pasibaigti.
Šiame pavyzdyje reikia mažinti sausainiai arba numatyti aiškią išėjimo sąlygą, pavyzdžiui, naudojant break.

