JAVA CIKLAI
Java įdėtiniai ciklai
Vieną ciklą galima įrašyti kito ciklo viduje. Tokia konstrukcija vadinama įdėtiniu ciklu (angl. nested loop) ir padeda apdoroti lenteles, tinklelius bei kelių matmenų duomenis.
Kaip veikia įdėtiniai ciklai?
Išorinis ciklas valdo pagrindinius kartojimus. Per kiekvieną jo iteraciją vidinis ciklas pradeda darbą iš naujo ir įvykdo visas savo iteracijas.
Ši programa sudaro paprastą trijų dienų planą, kuriame kiekvieną dieną yra du valgiai:
// Išorinis ciklas pereina per dienas
for (int diena = 1; diena <= 3; diena++) {
System.out.println("Diena: " + diena);
// Vidinis ciklas pereina per tos dienos valgius
for (int valgis = 1; valgis <= 2; valgis++) {
System.out.println(" Valgis: " + valgis);
}
}Diena: 1
Valgis: 1
Valgis: 2
Diena: 2
Valgis: 1
Valgis: 2
Diena: 3
Valgis: 1
Valgis: 2
- Išorinis ciklas pradeda nuo pirmos dienos ir konsolėje parodo Diena: 1.
- Tada paleidžiamas vidinis ciklas. Jis parodo pirmą ir antrą tos dienos valgį.
- Vidiniam ciklui pasibaigus, programa grįžta į išorinį ciklą ir pereina prie antros dienos.
- Antrą dieną vidinis skaitiklis vėl pradeda nuo
1, todėl vėl parodomi du valgiai. - Tas pats pakartojama trečią dieną. Taigi išorinis ciklas vykdomas 3 kartus, o vidinis – iš viso
3 × 2 = 6kartus.
Dviejų matmenų tinklelio pavyzdys
Įsivaizduok mažą kino salę. Išoriniu ciklu galima pereiti per eiles, o vidiniu – per kiekvienos eilės vietas:
for (int eile = 1; eile <= 3; eile++) {
for (int vieta = 1; vieta <= 4; vieta++) {
System.out.print("[" + eile + ":" + vieta + "] ");
}
System.out.println();
}[1:1] [1:2] [1:3] [1:4]
[2:1] [2:2] [2:3] [2:4]
[3:1] [3:2] [3:3] [3:4]
- Išorinis skaitiklis
eilepasirenka kino salės eilę: pirmą, antrą arba trečią. - Kiekvienoje eilėje vidinis skaitiklis
vietapereina nuo1iki4. - Žymėjimas [2:3] reiškia antrą eilę ir trečią vietą.
System.out.print()neperkelia žymeklio į naują eilutę, todėl keturios vietos parodomos greta.- Vidiniam ciklui pasibaigus, tuščias
System.out.println()pradeda naują konsolės eilutę kitai kino salės eilei.
Bendras iteracijų skaičius
Kai kiekvienas išorinio ciklo kartojimas paleidžia visą vidinį ciklą, bendras vidinio bloko vykdymų skaičius gaunamas sudauginus abiejų ciklų iteracijas:
int vietuSkaicius = 0;
for (int eile = 1; eile <= 3; eile++) {
for (int vieta = 1; vieta <= 4; vieta++) {
vietuSkaicius++;
}
}
System.out.println("Iš viso vietų: " + vietuSkaicius);Iš viso vietų: 12
- Pradžioje
vietuSkaiciusyra0. - Išorinis ciklas pereina per 3 kino salės eiles.
- Kiekvienoje eilėje vidinis ciklas pereina per 4 vietas.
- Kiekvieną kartą radus vietą,
vietuSkaicius++padidina bendrą skaičių vienetu. - Iš viso vidinis blokas įvykdomas
3 × 4 = 12kartų, todėl konsolėje parodoma Iš viso vietų: 12.
Pridėjus dar vieną įdėtinį ciklą, vykdymų skaičius dar kartą dauginamas, todėl dideliems duomenims svarbu įvertinti našumą.
Kur naudojami įdėtiniai ciklai?
- lentelių eilutėms ir stulpeliams apdoroti;
- dvimačiams masyvams ir matricoms pereiti;
- kino salių, klasių ar kitų vietų planams sudaryti;
- visoms dviejų duomenų rinkinių poroms palyginti;
- pasikartojantiems raštams ir ataskaitoms generuoti.
Rašyk aiškius įdėtinius ciklus
Kiekvienam skaitikliui suteik prasmingą pavadinimą, pavyzdžiui, eile ir vieta. Tinkamos įtraukos padeda matyti, kuris blokas priklauso išoriniam, o kuris vidiniam ciklui.
Jei ciklų įdėjimo lygių tampa daug, dalį logikos verta perkelti į atskirą metodą.

