NOVINKA: Kurz kybernetickej bezpečnosti teraz už od 0 €. Staň sa žiadaným profesionálom. Zisti viac:
NOVINKA: Staň sa dátovým analytikom od 0 € a získaj istotu práce, lepší plat a nové kariérne možnosti. Viac informácií:

10. diel - Cyklus for v Jave

V predchádzajúcom cvičení, Riešené úlohy k 8.-9. lekcii Javy, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

Teraz prejdeme k cyklom, po dnešnom Java tutoriále už budeme mať takmer kompletnú výbavu základných konštrukcií a budeme schopní programovať rozumné aplikácie v Jave.

Cykly

Ako už slovo cyklus napovedá, niečo sa bude opakovať. Keď chceme v programe niečo urobiť 100x, určite nebudeme písať pod seba 100x ten istý kód, ale vložíme ho do cyklu. Cyklov máme niekoľko druhov, vysvetlíme si, kedy ktorý použiť. Samozrejme si ukážeme praktické príklady.

Cyklus for

Tento cyklus má stanovený pevný počet opakovaní a hlavne obsahuje tzv. riadiacu premennú (celočíselnú), v ktorej sa postupne počas behu cyklu menia hodnoty. Syntax (zápis) cyklu for je nasledovná:

for (variable; condition; command)
  • variable je riadiaca premenná cyklu, ktorej nastavíme počiatočnú hodnotu (najčastejšie 0, pretože v programovaní všetko začína od nuly, nie od jednotky). Napr. teda int i = 0. Samozrejme si môžeme premennú i vytvoriť niekde nad cyklom a už nemusíme písať slovíčko int, býva ale zvykom používať práve int i.
  • condition je podmienka vykonania ďalšieho kroku cyklu. Akonáhle nebude platiť, cyklus sa ukončí. Podmienka môže byť napr (i < 10).
  • command nám hovorí, čo sa má v každom kroku s riadiacou premennou stať. Teda či sa má zvýšiť alebo znížiť. Na to využijeme špeciálne operátory ++ a --, tie samozrejme môžete používať aj úplne bežne mimo cyklu, slúžia na zvýšenie alebo zníženie premennej o 1.

Príklady použitia cyklu

Poďme si urobiť niekoľko jednoduchých príkladov na precvičenie for cyklu.

Klopanie na dvere

Väčšina z nás určite pozná Sheldona z The Big Bang Theory. Pre tých, čo nie, budeme simulovať situáciu, keď klope na dvere svojej susedky. Vždy 3x zaklope a potom zavolá: "Penny!". Náš kód by bez cyklov vyzeral takto:

System.out.println("Knock");
System.out.println("Knock");
System.out.println("Knock");
System.out.println("Penny!");

My ale už nič nemusíme otrocky opisovať:

for (int i = 0; i < 3; i++) {
    System.out.println("Knock");
}
System.out.println("Penny!");

Výstup programu:

Konzolová aplikácia
Knock
Knock
Knock
Penny!

Cyklus prebehne 3x, spočiatku je v premennej i nula, cyklus vypíše Knock a zvýši premennú i o jedna. Potom beží rovnako s jednotkou a dvojkou. Akonáhle je v premennej i trojka, už nesúhlasí podmienka i < 3 a cyklus končí. O vynechávaní zložených zátvoriek platí to isté, čo pri podmienkach. V tomto prípade tam nemusia byť, pretože cyklus spúšťa iba jediný príkaz. Teraz môžeme namiesto trojky napísať do deklarácie cyklu desiatku.

Rad

Príkaz sa spustí 10x bez toho, aby sme písali niečo navyše. Určite vidíte, že cykly sú mocným nástrojom.

Skúsme teraz využiť to, že sa nám premenná inkrementuje (zvyšuje). Vypíšme si čísla od jednej do desiatich a za každým dajme medzeru:

for (int i = 1; i <= 10; i++) {
    System.out.printf("%d ", i);
}

Vidíme, že riadiaca premenná má naozaj v každej iterácii (priebehu) inú hodnotu.

Pokiaľ vás zmiatlo použitie metódy printf(), môžeme namiesto nej použiť iba metódu print(), ktorá na rozdiel od metódy println() po vypísaní neodriadkuje:

for (int i = 1; i <= 10; i++) {
    System.out.print(i + " ");
}
Malá násobilka

Teraz si vypíšeme malú násobilku (násobky čísel 110, vždy do desiatich). Stačí nám urobiť cyklus od 1 do 10 a premennú vždy násobiť daným číslom. Mohlo by to vyzerať asi takto:

for (int i = 1; i <= 10; i++) {
    System.out.print(i + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 2) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 3) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 4) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 5) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 6) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 7) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 8) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 9) + " ");
}
System.out.println();
for (int i = 1; i <= 10; i++) {
    System.out.print((i * 10) + " ");
}

Výstup programu:

Konzolová aplikácia
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100

Keď program funguje, ešte to neznamená, že je zapísaný správne alebo efektívne. V praxi si programátori často nechávajú od AI poradiť, či nejde kód zjednodušiť. Zadajme teraz do Copilota prompt: "Zjednoduš kód vypisujúci malú násobilku.".

Copilot nám kód upraví podobne, ako je zapísaný nižšie:

System.out.println("Multiplication with nested loops:");
for (int j = 1; j <= 10; j++) {
    for (int i = 1; i <= 10; i++) {
        System.out.print((i * j) + " ");
    }
    System.out.println();
}

Pomerne zásadný rozdiel, však?

Mocnina čísla

Urobme si ešte jeden program, na ktorom si ukážeme prácu s vonkajšou premennou. Aplikácia bude vedieť spočítať mocninu s prirodzeným exponentom:

Scanner scanner = new Scanner(System.in);
System.out.println("Exponent calculator");
System.out.println("==========");
System.out.println("Enter the base: ");
int base = Integer.parseInt(scanner.nextLine());
System.out.println("Enter the exponent: ");
int exponent = Integer.parseInt(scanner.nextLine());

int result = 1;
for (int i = 0; i < exponent; i++) {
    result = result * base;
}

System.out.println("Result: " + result);
System.out.println("Thank you for using our exponent calculator");

Asi všetci tušíme, ako funguje mocnina. Pre istotu pripomenieme, že napríklad 23 = 2 * 2 * 2. Teda an spočítame tak, že si vytvoríme premennú s hodnotou 1. To je výsledok, ktorý by sme dostali pri nulovom exponente 20 = 1. Pokiaľ bude exponent 0, cyklus sa nespustí. V opačnom prípade budeme našu premennú postupne v cykle násobiť n-krát a a výsledok si budeme postupne ukladať. Pokiaľ k mocninám potrebujete viac informácií, máme tu samozrejme lekciu s algoritmom výpočtu ľubovoľnej mocniny. Vidíme, že naša premenná result je v tele cyklu normálne prístupná. Pokiaľ si však nejakú premennú založíme v tele cyklu, po skončení cyklu zanikne a už nebude prístupná:

Konzolová aplikácia
Exponent calculator
==========
Enter the base:
2
Enter the exponent:
3
Result: 8
Thank you for using our exponent calculator

Teraz už teda vieme, na čo sa cyklus for využíva. Zapamätajme si, že počet opakovaní je pevne daný.

Ukážka zacyklenia

Do premennej cyklu by sme nemali nijako zasahovať ani dosadzovať, program by sa mohol tzv. zacykliť. Skúsme si ešte posledný, odstrašujúci príklad:

// This code is wrong
for (int i = 1; i <= 10; i++) {
    i = 1;
}

Au, vidíme, že program sa zasekol. Cyklus stále inkrementuje premennú i, ale tá sa vždy zníži na hodnotu 1. Nikdy teda nedosiahne hodnotu > 10, cyklus nikdy neskončí. Program zastavíme tlačidlom Stop pri okne konzoly. To je pre dnešnú lekciu všetko 🙂

Zhrnutie lekcie

Cyklus for používame vtedy, keď vopred vieme, koľkokrát sa má niečo opakovať. Má riadiacu premennú, ktorá sa pri každom priechode mení, takže vďaka nej môžeme napríklad vypisovať čísla alebo násobky. Cyklus sa hodí aj na vnorené opakovanie, napríklad pri vypísaní malej násobilky pomocou dvoch cyklov. Dôležité je do riadiacej premennej vo vnútri cyklu zbytočne nezasahovať, pretože by sa program mohol zacykliť a nikdy neskončiť.

V budúcej lekcii, Cyklus while v Jave, sa budeme ešte venovať cyklom. Naučíme sa používať while cyklus a vylepšíme našu kalkulačku.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 59x (13.74 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Java

 

Predchádzajúci článok
Riešené úlohy k 8.-9. lekcii Javy
Všetky články v sekcii
Základné konštrukcie jazyka Java
Preskočiť článok
(neodporúčame)
Cyklus while v Jave
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
182 hlasov
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity