Slučky v jazyku Java

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> > }> > > }> }>

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




/*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