Pole
- motivace: často bychom potřebovali proměnné
a1
,a2
,a3
až třebaa1000
- dosud: používali jsme
awh.IntList
- přímo v Javě: datový typ pole (array)
- pole je datový typ
- je určen typem prvku pole (např.
int
) - a svojí velikostí (např. 10)
- je určen typem prvku pole (např.
- k jednotlivým prvkům ("proměnným"
a2
,a3
) se přistupuje přes jejich index (pořadí)- ten je vždy číslovaný od 0 do velikosti pole - 1
a[2]
- délka pole je pak
.length
(a.length
)- používejte ji, nikoliv konkrétní číslo - program vydrží změny ve velikosti
int pole[] = new int[3]; pole[0] = 1; pole[1] = 1; pole[2] = 2; // 3 [1, 1, 2] System.out.printf("%d [%d, %d, %d]\n", pole.length, pole[0], pole[1], pole[2]);
Další vlastnosti polí
- pole lze naplnit hodnotami při jeho deklaraci
int[] mesice = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
Rozdíly oproti awh.IntList
- pole
- součástí Javy bez extra classpath
- libovolný typ
- rychlejší
-
awh.IntList
,awh.DoubleList
- jednoduché zvětšování
-
add
vždy přidá, u pole jsme omezeni velikostí při vytvoření- resp. musíme vytvořit pole nové (větší) a prvky překopírovat
-
- metody navíc (setřídění apod.)
- jednoduché zvětšování
Volitelný počet argumentů funkce
- co když by se nám hodilo mít funkci pro nalezení minima?
int min(int a, int b) { ... }
- ale co kdybych ji chtěl mít pro 3 čísla?
int min3(int a, int b, int c) { return min(min(a, b), c); }
- nepraktické pro více možností...
- ... ale Java nabízí
public static int min(int... cisla) { int vysl = cisla[0]; for (int i = 1; i < cisla.length; i++) { if (cisla[i] < vysl) { vysl = cisla[i]; } } return vysl; }
- k parametrům přistupujeme jako k poli, ale volající je normálně vyjmenuje:
min(4, 5, 1, 10)
Úloha s polynomem
Nvrhněte a naprogramujte třídu pro práci s polynomy. Předpokládejte, že
koeficienty jsou typu int
, stupeň polynomu není omezen. Třída by měla
umožnit polynom vytvořit, vypsat a sečíst několik polynomů.
Kód z hodiny
public class MnohoclenyDemo { public static void main(String[] args) { Mnohoclen m1 = new Mnohoclen(0, -1, 4); Mnohoclen m2 = new Mnohoclen(5, -2, 4, 1); Mnohoclen scitance[] = new Mnohoclen[] { m1, m2 }; Mnohoclen soucet = Mnohoclen.suma(m1, m2); Mnohoclen soucet = Mnohoclen.suma(scitance); soucet.tiskni(); } }
public class Mnohoclen { private int[] koeficienty; public Mnohoclen(int... koef) { } public static Mnohoclen suma(Mnohoclen... scitance) { for (int i = 0; i < scitance.length; i++) { Mnohoclen a = scitance[i]; a.koeficienty.length } return null; } public void tiskni() { } }