logo

Slučky v jazyku Java

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: for-loop-in-java
    • 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:
    do-pri
      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>