Opakovanie skupiny príkazov (variabilný počet opakovaní)

<< Opakovanie skupiny príkazov (pevný počet opakovaní) | Obsah | Premenné >>

V predchádzajúcej kapitole sme sa dozvedeli ako zapísať to, že nejaká skupina príkazov sa má zopakovať zadaný počet krát. Toto vieme použiť na kreslenie štvorca, 12-cípej hviezdy (alebo vločky?), pravidelného 6-uholníka alebo iného pravidelného útvaru. Čo ale v prípade, keď potrebujeme nakresliť všeobecnejšie definovaný obrazec ako je napríklad n-cípa hviezda (vločka) alebo pravidelný n-uholník, kde n nie je vopred dané, ale je určené ako parameter metódy?

Zamyslime sa najprv, ako by mala vyzerať hlavička metódy (riadok hovoriaci o názve metód a jej parametroch). Doposiaľ sme sa stretli iba sa parametrami typu double - povolená hodnota bola číslo s desatinnou čiarkou ("reálne číslo"). Tento typ "povolenej" hodnoty pre parameter n nie je veľmi vhodný. Ako by totiž mala vyzerať 5.5-cípa hviezda alebo pravidelný 6.35-uholník? Ak chceme obmedziť hodnotu parametra na celé čísla, namiesto typu double použijeme typ int, ktorý dovoľuje len celé čísla. Iste tušíte, že aj tu je jeden menší problém. Keďže aj záporné čísla sú celé čísla, aj záporná hodnota je povolená ako hodnota parametra n. Toto však nebudeme teraz riešiť a na chvíľu sa spoľahneme, že používateľ bude zadávať len kladné čísla.

Vytváranie metódy na nakreslenie n-cípej hviezdy začneme napísaním "príkazov", ktorými povieme, že všetky objekty triedy MojaKorytnacka majú vedieť nakresliť pravidelnú n-cípu hviezdu (zatiaľ ale nepovieme ako):

public void nHviezda(int n, double dlzkaLuca) {

}

Čím sa líši nakreslenie 12-cípej hviezdy od n-cípej? Jednoduchou úvahou prídeme na to, že

  • potrebujeme nakresliť n lúčov (cípov) namiesto 12,
  • uhol, ktorý zvierajú lúče nie je 360/12=30, ale v prípade n lúčov sa uhol 360 ° rozdelí na n rovnakých úsekov, t.j. uhol každého z nich bude 360/n.

Pri programovaní metódy nHviezda teraz využijeme, že vo formulke na opakovanie skupiny príkazov ("for-cykle") môžeme napísať ako počet opakovaní nielen konkrétne číslo, ale aj meno parametra. Dôsledkom bude to, že formulka zabezpečí opakovanie skupiny príkazov taký počet krát, akú hodnotu aktuálne zastupuje zadaný parameter.

Výsledkom bude nasledujúca metóda:

public void nHviezda(int n, double dlzkaLuca) {
        for (int i = 0; i < n; i++) {
                this.step(dlzkaLuca);
                this.step(-dlzkaLuca);
                this.turn(360/n);
        }
}

Takto naprogramovaná metóda bude takmer dobrá. Vždy sa nakreslí zadaných n lúčov. Ak budeme trochu experimentovať s hodnotou parametra n, ľahko prídeme na to, že ak zadáme počet lúčov rovný 100, nakreslí sa síce 100 lúčov (môžete ich skúsiť spočítať...), no uhly medzi nimi nebudú rovnaké. Ako tento problém vyriešiť si vysvetlíme neskôr. Každopádne však vieme, že príkazy sa vykonali 100 krát a to nám nateraz stačí.

Čo si treba pamätať?

  • Ako počet opakovaní skupiny príkazov pomocou príkazu "for" (opakovacej formulky) môžeme uviesť nielen konkrétne číslo, ale aj meno parametra. Aktuálna hodnota tohto parametra potom určuje, koľko krát sa skupina príkazov vykoná.
  • Ak ako typ parametra uvedieme int, ako hodnoty parametra budú dovolené len celé čísla.

<< Opakovanie skupiny príkazov (pevný počet opakovaní) | Obsah | Premenné >>