Slučovanie v programovacích jazykoch je vlastnosť, ktorá uľahčuje vykonávanie množiny inštrukcií/funkcií opakovane, pričom sa niektoré podmienky vyhodnotia ako pravdivé. Java poskytuje tri spôsoby vykonávania slučiek. Zatiaľ čo všetky spôsoby poskytujú podobnú základnú funkčnosť, líšia sa syntaxou a časom kontroly stavu.
java poskytuje tri typy podmienených príkazov, tento druhý typ je príkaz slučky.
- while cyklus: Slučka while je príkaz riadiaceho toku, ktorý umožňuje opakované vykonávanie kódu na základe danej booleovskej podmienky. Cyklus while si možno predstaviť ako opakovaný príkaz if.
Syntax:
while (boolean condition) { loop statements... }>
Java
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > int> i=> 0> ;> > while> (i<=> 10> )> > {> > System.out.println(i);> > i++;> > }> > }> }> |
>
>Výkon
0 1 2 3 4 5 6 7 8 9 10>
- Vývojový diagram:
- Kým cyklus začína kontrolou boolovskej podmienky. Ak sa vyhodnotí ako pravda, potom sa vykonajú príkazy tela cyklu, inak sa vykoná prvý príkaz nasledujúci po slučke. Z tohto dôvodu je aj tzv Vstupná kontrolná slučka
- Keď je podmienka vyhodnotená ako pravdivá, vykonajú sa príkazy v tele cyklu. Normálne príkazy obsahujú aktualizačnú hodnotu pre premennú, ktorá sa spracováva pre ďalšiu iteráciu.
- Keď sa podmienka stane nepravdivou, cyklus sa ukončí, čo znamená koniec jeho životného cyklu.
- pre slučku: for loop poskytuje stručný spôsob zápisu štruktúry cyklu. Na rozdiel od cyklu while používa príkaz for inicializáciu, podmienku a prírastok/zníženie v jednom riadku, čím poskytuje kratšiu, ľahko laditeľnú štruktúru cyklovania.
Syntax:
for (initialization condition; testing condition;increment/decrement) { statement(s) }>
Java
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > for> (> int> i=> 0> ;i<=> 10> ;i++)> > {> > System.out.println(i);> > }> > }> }> |
>
>Výkon
0 1 2 3 4 5 6 7 8 9 10>
- Vývojový diagram:
- Inicializačná podmienka: Tu inicializujeme používanú premennú. Označuje začiatok cyklu for. Dá sa použiť už deklarovaná premenná alebo môže byť deklarovaná premenná, len lokálne do slučky. Testovacia podmienka: Používa sa na testovanie výstupnej podmienky pre slučku. Musí vrátiť boolovskú hodnotu. Je to tiež Vstupná kontrolná slučka pretože podmienka sa kontroluje pred vykonaním príkazov cyklu. Vykonanie príkazu: Keď je podmienka vyhodnotená ako pravdivá, vykonajú sa príkazy v tele cyklu. Increment/Decrement: Používa sa na aktualizáciu premennej pre ďalšiu iteráciu. Ukončenie slučky: Keď sa podmienka stane nepravdivou, slučka sa ukončí, čím sa skončí jej životný cyklus.
- robiť, kým: Cyklus do while je podobný cyklu while s jediným rozdielom, že kontroluje stav po vykonaní príkazov, a preto je príkladom Ukončite riadiacu slučku.
Syntax:
do { statements.. } while (condition);>
Java
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > int> i=> 0> ;> > do> > {> > System.out.println(i);> > i++;> > }> while> (i<=> 10> );> > }> }> |
>
>Výkon
0 1 2 3 4 5 6 7 8 9 10>
- Vývojový diagram:
- Cyklus do while začína vykonaním príkazu (príkazov). Prvýkrát sa nekontroluje žiadny stav.
- Po vykonaní príkazov a aktualizácii hodnoty premennej sa skontroluje podmienka na pravdivú alebo nepravdivú hodnotu. Ak sa vyhodnotí ako true, spustí sa ďalšia iterácia cyklu.
- Keď sa podmienka stane nepravdivou, cyklus sa ukončí, čo znamená koniec jeho životného cyklu.
- Je dôležité poznamenať, že cyklus do-while vykoná svoje príkazy aspoň raz pred kontrolou akejkoľvek podmienky, a preto je príkladom ukončenia riadiacej slučky.
Úskalia slučiek
- Nekonečná slučka: Jednou z najčastejších chýb pri implementácii akéhokoľvek druhu slučky je, že sa nemusí nikdy ukončiť, to znamená, že slučka beží nekonečne dlho. Stáva sa to vtedy, keď stav z nejakého dôvodu zlyhá. Príklady: Nekonečný cyklus for :
Java
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > for> (;;) {> > }> > }> }> |
>
>
nekonečná slučka while:
Java
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > while> (> true> )> > {> > // statement> > }> > > }> }> |
počítačové siete
>
>
Java
//Java program to illustrate various pitfalls.> public> class> LooppitfallsDemo> {> > public> static> void> main(String[] args)> > {> > // infinite loop because condition is not apt> > // condition should have been i>0.> > for> (> int> i => 5> ; i !=> 0> ; i -=> 2> )> > {> > System.out.println(i);> > }> > int> x => 5> ;> > // infinite loop because update statement> > // is not provided.> > while> (x ==> 5> )> > {> > System.out.println('In the loop');> > }> > }> }> |
>
>
Ďalším úskalím je, že môžete niečo do svojej zbierky pridávať cez slučku a môže vám dôjsť pamäť. Ak sa pokúsite spustiť nižšie uvedený program, po určitom čase sa vyvolá výnimka nedostatku pamäte.
Java
//Java program for out of memory exception.> import> java.util.ArrayList;> public> class> Integer1> {> > public> static> void> main(String[] args)> > {> > ArrayList ar => new> ArrayList();> > for> (> int> i => 0> ; i { ar.add(i); } } }> |
>
>
Výkon:
Exception in thread 'main' java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Unknown Source) at java.util.Arrays.copyOf(Unknown Source) at java.util.ArrayList.grow(Unknown Source) at java.util.ArrayList.ensureCapacityInternal(Unknown Source) at java.util.ArrayList.add(Unknown Source) at article.Integer1.main(Integer1.java:9)>
Vnorená slučka:
Vnorený cyklus znamená príkaz cyklu v rámci iného príkazu cyklu.
Existujú rôzne kombinácie použitia slučky pre slučka, zatiaľ čo slučka, do-pri slučka.
Príklad 1 Vnorená slučka for
Java
vytvorenie poľa reťazcov v jazyku Java
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main (String[] args) {> > for> (> int> i => 0> ; i <> 3> ; i++){> > for> (> int> j => 0> ; j <> 2> ; j++){> > System.out.println(i);> > }> > System.out.println();> > }> > }> }> |
>
>Výkon
0 0 1 1 2 2>
Príklad 2 Vnorená slučka while
Java
import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> i => 1> , j => 1> ;> > while> (i <=> 3> ) {> > while> (j <=> 3> ) {> > System.out.print(j);> > j++;> > }> > i++;> > System.out.println(> ''> );> > j => 1> ;> > }> > }> }> |
>
>Výkon
123 123 123>
Príklad 3 Vnorená slučka do while
Java
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> row => 1> , column => 1> ;> > int> x;> > do> {> > x => 4> ;> > do> {> > System.out.print(> ''> );> > x--;> > }> while> (x>= riadok);> > column => 1> ;> > do> {> > System.out.print(column +> ' '> );> > column++;> > }> while> (column <=> 5> );> > System.out.println(> ' '> );> > row++;> > }> while> (row <=> 5> );> > }> }> |
>
>Výkon
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5>
Príklad 4 Vnorená slučka while a for
Java
/*package whatever //do not write package name here */> import> java.io.*;> class> GFG {> > public> static> void> main(String[] args)> > {> > int> weeks => 3> ;> > int> days => 7> ;> > int> i => 1> ;> > // outer loop> > while> (i <= weeks) {> > System.out.println(> 'Week: '> + i);> > // inner loop> > for> (> int> j => 1> ; j <= days; ++j) {> > System.out.println(> ' Days: '> + j);> > }> > ++i;> > }> > }> }> |
>
>Výkon
Week: 1 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 2 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7 Week: 3 Days: 1 Days: 2 Days: 3 Days: 4 Days: 5 Days: 6 Days: 7>