Získejte 500 Kč! Sleva pro fanoušky na Facebooku

Java - while, for (16.díl)

« zpět na Java

obrazky/java_logo.png

Přehled příkazů pro opakování

Tyto příkazy umožňují provádět opakování jednoho nebo více příkazů tvořících tzv. tělo cyklu. Opakování (tzv. iterace) je prováděno na základě vyhodnocování logického výrazu nazvaného podmínka opakování. V Javě existují tři základní typy cyklů: cyklus for, cyklus while, cyklus do while. Při konstrukci podmínky opakování musíme dávat pozor, aby nevznikl tzv. nekonečný cyklus, který by probíhal neustále bez možnosti ukončení těla cyklu.

Cyklus while

Cyklus while obsahuje vyhodnocuje podmínku opakování před průchodem cyklu. Pokud je pravdivá, je provedeno tělo cyklu. Používáme ho v případech, kdy nevíme, kolikrát opakování proběhne. Jeho syntaxi lze zapsat takto

while (vyraz)
telo prikazu;

Tělo příkazu nemusí proběhnout ani jednou, pokud je výraz napoprvé vyhodnocen jako false. V těle cyklu musí být modifikována proměnná ovlivňující hodnotu výrazu, jinak by vznikl nekonečný cyklus. Následující příklad ukazuje výpočet faktoriálu za použití cyklu while, hodnota je přečtena ze standardního vstupu.

public class faktorial
{
public static void main (String [] args)
{
int cislo, f;
f=1;
byte [] pole=new byte [30];
System.out.println (Zadejte cislo);
System.in.read(pole);
String retezec=new String(pole);
retezec=retezec.trim();
int cislo=(int)Long.parseLong(retezec);
while (cislo>0)
{
f=f*cislo;
cislo--;
}
System.out.println(cislo+!=f);
}
}


Cyklus for

Cyklus for je používán v případech, kdy známe údaje o výchozí a koncové hodnotě testovacího výrazu. Syntaxi cyklu for lze zapsat

for (inicializacni_vyraz; testovaci_vyraz;zmenovy_vyraz)
telo_prikazu

Inicializační výraz je vykonán pouze jednou, a to ještě před vyhodnocením testovacího výrazu. Testovací výraz učuje, zda se má provést tělo cyklu. Tělo cyklu se provádí se tak dlouho, dokud je testovací výraz vyhodnocen jako pravdivý. Změnový výraz se vyhodnotí na konci cyklu po vykonání těla cyklu. Používá se pro změnu hodnoty testovacího výrazu. Inicializační, testovací u změnový výraz jsou nepovinné, nemusí být uváděny. Podívejme se na některé příklady. Nejčastěji je prováděna deklarace s inicializací přímo v hlavičce cyklu for.

for (int i=0;i<10;i++) System.out.println(i);
Deklarace může být provedena mimo cyklus, inicializace v cyklu.
int i;
for (i=0;i<10;i++) System.out.println(i);

Mimo cyklus mohou být umístěny deklarace i inicializace. V tom případě je nutno provádět změnu hodnoty testovacího výrazu v těle cyklu, jinak by vznikl nekonečný cyklus.
int i=0;
for (;i<10;i++) System.out.println(i++);

Lze vytvořit cyklus s prázdným tělem, kdy součástí změnového výrazu bude i výkonný kód.
int i=0;
for (;i<10;System.out.println(i++);

Může vytvořit i minimalistickou variantu cyklu využívající stejně jako příkaz switch k předčasnému ukončení cyklu příkaz break.

int i=0;
for (; ; ;)
{
if (i<10) System.out.println(i++);
else break;
}

Poslední tři konstrukce spíše ilustrují možnosti používání cyklu for, v praxi nejsou příliš často používány, zápis není přehledný. V cyklu for můžeme používat více inicializačních, testovacích a změnových výrazů, které jsou odděleny operátorem čárka.

int i, j;
for (i=0, j=0;i<10;i++,j++)
{
System.out.println(i);
System.out.println(j);
}

Deklarace obou proměnných je nutno v takovém případě provést vně cyklu. Není vhodné, aby byly hodnoty proměnných změnového výrazu na sobě vzájemně závislé.

int i, j;
for (i=0, j=0;i<10, j<20;i++,j=3*i)
{
System.out.println(i);
System.out.println(j);
}

V takovém případě je poměrně obtížné na první pohled stanovit hodnoty změnových výrazů.
Autor: Filip Koval