JAVA CIKLŲ VALDYMAS
Java break ir continue
break ir continue pakeičia įprastą ciklo eigą. Pirmoji instrukcija visiškai nutraukia ciklą, o antroji praleidžia tik dabartinę iteraciją.
break instrukcija
break iš karto užbaigia artimiausią ciklą. Programa toliau vykdo pirmą instrukciją po ciklo. Tai naudinga, kai ieškomas rezultatas jau rastas ir likusių elementų tikrinti nebereikia.
Ši programa vardų sąraše ieško Rūtos:
String[] vardai = {"Ona", "Jonas", "Rūta", "Mantas"};
for (String vardas : vardai) {
if (vardas.equals("Rūta")) {
System.out.println("Rūta rasta");
break;
}
System.out.println("Tikrinamas vardas: " + vardas);
}Tikrinamas vardas: Ona
Tikrinamas vardas: Jonas
Rūta rasta
for-eachciklas vardus paima iš eilės: pirmiausia Oną, tada Joną ir Rūtą.- Onos vardas nėra lygus tekstui Rūta, todėl
ifblokas praleidžiamas ir parodomas tikrinamas vardas. - Tas pats nutinka tikrinant Joną.
- Pasiekus Rūtą, metodas
equals() grąžinatrue. Programa parodo Rūta rasta. breakiš karto užbaigia visą ciklą, todėl po Rūtos esantis Mantas jau nebetikrinamas.
break naudojamas ir switch instrukcijoje.switch bloke jis sustabdo perėjimą į kitą case, o cikle – užbaigia visą kartojimą.
continue instrukcija
continue nutraukia tik dabartinę iteraciją. Po jo esantis ciklo bloko kodas praleidžiamas, tačiau pats ciklas tęsiasi nuo kitos iteracijos.
Neigiama kaina reiškia klaidingą įrašą, kurio nenorime rodyti:
int[] kainos = {3, -1, 5, -1, 2};
for (int kaina : kainos) {
if (kaina < 0) {
continue;
}
System.out.println("Kaina: " + kaina + " eurai");
}Kaina: 3 eurai
Kaina: 5 eurai
Kaina: 2 eurai
- Ciklas paeiliui gauna kainas
3, -1, 5, -1, 2. - Kaina
3nėra neigiama, todėl ji parodoma konsolėje. - Pasiekus
-1, sąlygakaina < 0yra teisinga ir vykdomascontinue. continuepraleidžia žemiau esančiąprintln()eilutę, bet nesustabdo viso ciklo.- Todėl abi klaidingos reikšmės praleidžiamos, o kainos
5ir2vis tiek parodomos.
break ir continue skirtumas
| Instrukcija | Kas nutinka? | Ar ciklas tęsiamas? |
|---|---|---|
break | Nutraukiamas visas artimiausias ciklas | Ne |
continue | Praleidžiama likusi dabartinės iteracijos dalis | Taip |
break ir continue viename cikle
Jonas treniruojasi darbo dienomis, tačiau trečiadienį ilsisi, o prasidėjus savaitgaliui ciklas baigiamas:
for (int diena = 1; diena <= 7; diena++) {
if (diena == 3) {
continue; // Trečiadienį treniruotė praleidžiama
}
if (diena == 6) {
break; // Prasidėjo savaitgalis
}
System.out.println("Treniruotės diena: " + diena);
}Treniruotės diena: 1
Treniruotės diena: 2
Treniruotės diena: 4
Treniruotės diena: 5
- Pirmą ir antrą dieną nė viena speciali sąlyga netinka, todėl abi dienos parodomos.
- Trečią dieną vykdomas
continue. Trečiadienio išvedimas praleidžiamas, tačiau ciklas tęsiasi. - Ketvirta ir penkta dienos parodomos įprastai.
- Šeštą dieną prasideda savaitgalis ir vykdomas
break. - Visas ciklas sustoja, todėl nei šešta, nei septinta diena konsolėje nepasirodo.
Naudojimas kituose cikluose
break ir continue veikia ne tik for, bet ir while bei do while cikluose:
int obuoliai = 5;
while (obuoliai > 0) {
obuoliai--;
if (obuoliai == 2) {
continue;
}
if (obuoliai == 0) {
break;
}
System.out.println("Liko obuolių: " + obuoliai);
}Liko obuolių: 4
Liko obuolių: 3
Liko obuolių: 1
- Pradžioje yra
5obuoliai. Kiekvieno kartojimo pradžioje jų skaičius sumažinamas vienetu. - Reikšmės
4ir3parodomos įprastai. - Kai lieka
2obuoliai,continuepraleidžia išvedimo eilutę, todėl skaičiaus 2 nematome. - Kitame kartojime lieka
1obuolys, todėl jis parodomas. - Kai reikšmė tampa
0,breakužbaigia ciklą dar prieš išvedimą.
continue.while cikle per anksti panaudotas continue gali praleisti skaitiklio pakeitimą ir sukurti begalinį ciklą.
Naudok saikingai
Šios instrukcijos padeda anksti užbaigti nereikalingą darbą ir sumažinti giliai įdėtų sąlygų skaičių. Vis dėlto daug break ir continue viename cikle gali apsunkinti programos eigos supratimą, todėl kiekviena išėjimo ar praleidimo sąlyga turėtų būti aiški.

