Cykly - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



Java

Cykly

java

14. října 2002, 00.00 | Pokračování seriálu o programování v jazyce Java. Další nutností bez které se v programování neobejdete jsou cykly. Zvu vás tedy na for, while či do-while.

Cykly často patří do malé časti kódu, která provádí většinu operací aplikace. To klade na programátora dost vysoké nároky, obzvláště u vnořených cyklů či u nekonečných cyklů.

Standardně existují tři iterační příkazy for, while, do-while.

For

For se většinou používá pro takový cyklus, kdy víme kolikrát ho chceme provést. Např. od čísla 5 do 120. Základní syntaxe vypadá takto:

     for  (start; stop_podmínka; iterace)
          příkaz;

Ve startu často bývá deklarace proměnné i jen nastavení její hodnoty. Tato proměnná se následně často využívají jako čítač např. u polí. V podmínce1 se pak velice často objevuje porovnání je-li hodnota menší než něco. A jako iterace to bývá prosté zvýšení o jedničku. Podmínka se samozřejmě vyhodnocuje před každým začátkem nového kola. Následný příkaz bývá většinou reprezentovaný blokem příkazů.

     for  (int i = 0; i < 10; i++) {
          příkaz;
     }

Ač je tento příklad typický, for vůbec nemusí být tak jednoduchý: podmínka může být složená a iterace nemusí být lineární, narozdíl od prostého zvýšení o jedničku.

     for  (i = 0; (i != 255) && (i != 127) || (i < 32); i = get_New_Value()) {
          příkaz;
     }

Je také nadevše jasné, že iterace nemusí být nutně přírůstková, ale i úbytková2.

Vzhledem k značné podobnosti s C++ je možné for používat značně různorodě, i když se stejnými výsledky.

  • klasický — asi nejčitelnější
  •      for  (int i = 0; (i < 1024; i++) {
              ...
         }
  • bez inicializace — zcela chybí blok inicializace Proměnné.. Jednotlivé části fóru mohou být prázdné, stejně tak jako spolu vůbec nemusejí souviset např. přes proměnou i. Hodí se ve chvíli, kdy hodnota závisí na minulých výpočtech.
  •      int i = 0;
    // výpočet, případná změna i
         for  (; (i < 1024; i++) {
              ...
         }
  • bez iterátoru — stejně tak iterátor nemusí být přítomen. Může být někde v bloku příkazů.
  •      for  (int i = 0; (i < 1024; ) {
              i++;
         }
  • následují různé varianty toho co chybí až se dostanete do úplně prázdného foru. Který je mimochodem nekonečný, a aby se program nedostal do smyčky musí se někde ukončit breakem (více dále).
  •      for  ( ; ; ) {
              if  (++i < 1024) break  ;
         }
  • poslední „prasárnou“ je zapsat všechny příkazy např. do iterátoru a příkaz foru nechat prázdný. (Tuhle možnost zakazuji, nechte si ji tak do nějaké soutěže!)
  •      for  (int i = 0; (i < 1024; System.out.println(i++)) {
              ...
         }

    Tato myšlenka se dá ještě rozvinout. Nemusí tam být totiž jen jeden příkaz, ale celá skupina. K jejich ukončování se místo středníku používá čárka. Tato pravidla lze použít i v druhých dvou částech foru. S jediným s čím souhlasím je asi toto:

         for  (i = 0, b = false; i < 1024; i++, b = (boolean) i) {
              ...
         }

    While

    Zatímco for byl především pro cyklus, pro situaci, kdy vím kolikrát nastane, while je téměř opačného významu. Proto také v sobě obsahuje jen podmínku, která se vyhodnotí, před každým vstupem do nového kola. Při vyhodnocení jako false se cyklus ukončí. Po podmínce už následuje jenom příkaz resp. blok příkazů.

         while  (podmínka)
              příkaz

    Reálně to pak vypadá takto:

         while  (i < 1024)
              i = get_New_Value();

    Stejně tak jako u for lze vytvořit nekonečný cyklus, a to tak že do podmínky se uloží true. Zajisté je ho pak nutno někde ukončit.

         while  (true)
              if  (command == "terminate") break  ;

    Do – while

    Jedná se v podstatě o while s jediným rozdílem. Testování podmínky se provádí vždy až po provedení příkazů.

         do  {
              příkazy
         } while  (podmínka);

    Cyklus se opět ukončí při hodnotě podmínky false.

         do  {
              i++;
         } while  (i < 1024);

    Typicky se můžete setkat s názorem Céčkařů, že do-while je zbytečné a že si musíte vystačit s while. Co na to říct?Snad jen to, že existují různé situace, i když jsou v menšině, kdy je do-while opravdu nejlepší volbou.

    Příště si dokončíme cykly tím, že si povíme o příkazech break a continue. Mimo to se ještě podíváme na switch.


    1. – při jejím splnění se cyklus ukončí
    2. – v Pascalu downto

    Obsah seriálu (více o seriálu):

    Tématické zařazení:

     » Rubriky  » Java  

     

     

     

    Nejčtenější články
    Nejlépe hodnocené články

     

    Přihlášení k mému účtu

    Uživatelské jméno:

    Heslo: