# Cykly

- opakování části kódu
- základní pojmy:
	- **řídící proměnná cyklu**
		- Proměnná, na které závisí ukončení cyklu
		- Nejčastěji bývá pouze jedna
	- **podmínka ukončující cyklus**
		- Logický výraz – cyklus končí, pokud je jeho výsledek false
	- **hlavička cyklu**
		- Klíčové slovo určující typ cyklu (for, while nebo do) a výrazy v následujících kulatých závorkách
	- **tělo cyklu**
		- příkazy ve složených závorkách (tj. tvořící blok), které se mají opakovaně provést
		- Přestavuje výkonný kód

### Cyklus s podmínkou na začátku (cyklus while)

- Vhodný v případě, že ukončovací podmínka závisí na nějakém výrazu uvnitř cyklu
	- Není dopředu jasné, kolikrát cyklus proběhne
	- Např. načtení nějakých hodnot až do jejich vyčerpání (např. ze souboru)
- Podmínka, zda má být cyklus proveden se testuje PŘED vykonáním těla cyklu
- syntaxe:
 ```java
 while (výraz) { 
	příkaz1; 
	příkaz2; 
	… 
}
```

### Cyklus s podmínkou na konci (cyklus do – while)

- Velmi podobný cyklu while
	- Používá se ale mnohem méně (v Javě)
- Podmínka, zda má být cyklus ukončen, se testuje **PO** vykonání těla cyklu
	- Tělo cyklu se provede, pak se otestuje podmínka, a pokud je splněna, tělo cyklu se provede znovu
	- Cyklus tedy proběhne minimálně jednou
- syntaxe:
```java
do {
	příkaz1;
	příkaz2;
	… 
} while (výraz);
```

### Cyklus se známým počtem opakování (cyklus for)

- Vhodný v případě, že jsou předem známá omezující kritéria
	- Počáteční a koncová hodnota řídící proměnné a její způsob ovlivnění v každé obrátce cyklu
	- V mnoha případech to znamená, že je známý počet opakování
- Podmínka, zda má být cyklus proveden, se testuje PŘED vykonáním těla cyklu
	- Cyklus tedy nemusí proběhnout ani jednou
- Inicializace je nastavení počáteční hodnoty řídící proměnné cyklu a často i její deklarace, typicky ``` int i = 0 ```
- Ukončovací podmínka je logický výraz, který by měl obsahovat řídící proměnnou, 
   typicky ``` i < hodnota ```
- Změna řídící proměnné je příkaz, který mění hodnotu řídící proměnné, typicky se jedná o inkrementaci ``` (i++) ```, ale může to být i jiný výraz (např. ``` i += 2 ```)
- syntaxe:
```java
for (inicializace; ukončovací podmínka; změna řídící proměnné) { 
	příkaz1; 
	příkaz2; 
	… 
}
```
- Zkrácený zápis pro procházení polí a kolekcí
```java
int[] pole = {6, 7, 8, 9}; //Deklarace pole s inicializaci, bude vysvetleno 
for (int prvek: pole) { 
	System.out.println("Prvek pole: " + prvek); 
}
```

### Příkazy break; a continue;

- Příkazy, které ovlivňují chování cyklu nezávisle na řídící proměnné 
- Mohou být použity u všech tří cyklů 
- Pokud jsou cykly vnořeny do sebe, ovlivňují tyto příkazy cyklus, ve kterém jsou bezprostředně uvedeny
- ``` break; ```
	- Okamžitě ukončí cyklus
	- Používá se pro předčasné ukončení cyklu (např. při výskytu chyby) či pro řádné ukončení nekonečného cyklu
- ``` continue; ```
	- Skočí na konec těla cyklu, čímž si vynutí další obrátku (iteraci) cyklu 
	- Cyklus neskončí
	- Používá se méně než break;

