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);
}
Konsolės rezultatas

Tikrinamas vardas: Ona
Tikrinamas vardas: Jonas
Rūta rasta

  1. for-each ciklas vardus paima iš eilės: pirmiausia Oną, tada Joną ir Rūtą.
  2. Onos vardas nėra lygus tekstui Rūta, todėl if blokas praleidžiamas ir parodomas tikrinamas vardas.
  3. Tas pats nutinka tikrinant Joną.
  4. Pasiekus Rūtą, metodas grąžina true. Programa parodo Rūta rasta.
  5. break iš 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");
}
Konsolės rezultatas

Kaina: 3 eurai
Kaina: 5 eurai
Kaina: 2 eurai

  1. Ciklas paeiliui gauna kainas 3, -1, 5, -1, 2.
  2. Kaina 3 nėra neigiama, todėl ji parodoma konsolėje.
  3. Pasiekus -1, sąlyga kaina < 0 yra teisinga ir vykdomas continue.
  4. continue praleidžia žemiau esančią println() eilutę, bet nesustabdo viso ciklo.
  5. Todėl abi klaidingos reikšmės praleidžiamos, o kainos 5 ir 2 vis tiek parodomos.

break ir continue skirtumas

Java break ir continue palyginimas
InstrukcijaKas nutinka?Ar ciklas tęsiamas?
breakNutraukiamas visas artimiausias ciklasNe
continuePraleidžiama likusi dabartinės iteracijos dalisTaip

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);
}
Konsolės rezultatas

Treniruotės diena: 1
Treniruotės diena: 2
Treniruotės diena: 4
Treniruotės diena: 5

  1. Pirmą ir antrą dieną nė viena speciali sąlyga netinka, todėl abi dienos parodomos.
  2. Trečią dieną vykdomas continue. Trečiadienio išvedimas praleidžiamas, tačiau ciklas tęsiasi.
  3. Ketvirta ir penkta dienos parodomos įprastai.
  4. Šeštą dieną prasideda savaitgalis ir vykdomas break.
  5. 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);
}
Konsolės rezultatas

Liko obuolių: 4
Liko obuolių: 3
Liko obuolių: 1

  1. Pradžioje yra 5 obuoliai. Kiekvieno kartojimo pradžioje jų skaičius sumažinamas vienetu.
  2. Reikšmės 4 ir 3 parodomos įprastai.
  3. Kai lieka 2 obuoliai, continue praleidžia išvedimo eilutę, todėl skaičiaus 2 nematome.
  4. Kitame kartojime lieka 1 obuolys, todėl jis parodomas.
  5. Kai reikšmė tampa 0, break užbaigia ciklą dar prieš išvedimą.
Atnaujink sąlygos būseną prieš 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.