====== Práce s poli ====== ==== Deklarace pole ==== Deklarace pole se skládá ze dvou částí z typu pole a jeho jména. Při deklaraci pole se neudává jeho velikost, důvodem je jeho dynamická alokace. Pole se deklaruje jako referenční proměnná … int [] poleCisel; // deklarace pole … Protože se při deklaraci nepřiděluje paměť je nutné před prvním použitím pole paměť přidělit pomocí operátoru //new//. … poleCisel = new int [20]; // pole delky 20 … Často se přidělení paměti provádí přímo při deklaraci pole: … int [] poleCisel = new int [30]; // pole delky 30 … Pole není nutné vytvářet pomocí operátoru //new//, pokud víme jaké hodnoty bude pole obsahovat. Pole lze inicializovat přímo při jeho deklaraci. Práce s tímto polem je stejná jako s kterýmkoliv jiným, tzn. má všechny vlastnosti pole. … int [] poleCisel = {1,2,3,4,5,6}; // pole delky 6 s hodnotami 1,2,3,4,5,6 … Délku pole zadanou při jeho vytvoření si není nutné pamatovat (např. v některé proměnné). Lze ji kdykoliv zjistit pomocí proměnné //length//. Při průchodu polem v cyklu se používání této proměnné doporučuje. Důvodem je dynamičnost délky pole. … int delkaPole; int [] poleCisel = {1,2,3,4,5,6}; ….. delkaPole = poleCisel.length; // zjisteni delky pole s nazvem poleCisel … ==== Práce s poli ==== Přístup k jednotlivým prvkům pole je pomocí názvu pole a indexu pořadí prvku v poli. Indexy začínají vždy od **__nuly__**! … int prvekPole; int [] poleCisel = {1,2,3,4,5,6}; … prvekPole = poleCisel[2]; // prvek z poleCisel s indexem 2 (treti pozice) … Pokud potřebujeme zpracovávat všechny, lze využít upravenou variantu cyklu //for//. Tato konstrukce nevyžaduje pro přístup k jednotlivým prvkům pole indexy. Příkaz //for// má v tomto případě tři parametry: datový typ prvků pole, jméno proměnné, do které jsou postupně ukládány jednotlivé prvky pole a jméno zpracovávaného pole. … int [] poleCisel = {1,2,3,4,5,6}; … for (int hodnotaPrvkuPole : poleCisel ) { příkazy; } … ==== Dvourozměrná pole ==== Jedná se vlastně o pole polí a pracuje se s nimi jako s jednorozměrnými poli. Rozdíl je při deklaraci, kde je třeba uvést všechny rozměry. Řádky ovšem nemusí mít nutně stejnou délku sloupce. ... int [][] dvouRozmernePole = new int [5][4]; ... Přístup k jednotlivým prvkům pole je opět stejný, přes indexy řádků a sloupců. ... int hodnotaPrvkuPole; ... hodnotaPrvkuPole = dvouRozmernePole[indexRadku] [indexSloupcu]; ... I dvourozměrné pole lze vytvořit statické inicializace. ... int [][] dvouRozmernePoleStatickyInicializovane = {{1,2,3},{11,12},{21,22,23,24}}; ... Pokud potřebujeme v programu vícerozměrné pole (3, 4, 5, ....) postupuje se analogicky. Pokud je takové pole vytvářeno po částech nelze přeskakovat rozměry. ... int [][][] triRozmernePoleStatickyInicializovane = {{{ 1, 2, 3},{11,12,13},{21,22,23}}, {{31,32,33},{41,42,43},{51,52,53}}}; ...