Java - polia

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání

Vo fyzike (a samozrejme aj v inych odboroch) pracujeme často s usporiadanou postupnosťou hodnôt, napríklad časová postupnosť nameraných dát. V programovacích jazykoch je možné reprezentovať takúto postupnosť pomocou polí. Polia patria medzi základné dátové štruktúry, s niektorými ďaľšími sa obznámime neskôr. V jave môžene vytvárať polia ľubovolných dátových typov primitívnych aj objektových, môžeme vytvárať viacrozmerné polia ako aj polia polí. V jave na vytváranie polí použijeme operátor new v kombinácii s hranatými zátvorkami [].

    int []a;       // vytvorenie referencie na pole hodnot
    ...
    a=new int[5];   // priradenie referencie polu hodnot

V prvom riadku vytvorime odkaz na (budúce) pole, referencia je štandardne inicializovaná hodnotou null. V daľšom riadku pomocou operátora new rezervujeme v pamäti potrebný priestor pre uloženie poľa, java sama podla dátového typu spočíta potrebnú veľkosť. Do hranatých zátvoriek uvedieme veľkosť poľa (= počet kusov). Celý postup môžeme zapísať aj v jednom riadku

    int []a=new int[5];

Vytvorené prvky poľa sú inicializované štandardnou (default) hodnotou, v našom prípade 0. K prvkom poľa pri zápise alebo čítaní pristupujeme pomocou indexu v hranatých zátvorkách. Polia sú indexované od hodnoty 0 po hodnotu n-1, kde n je veľkosť poľa. Java kontroluje veľkosť indexu.

    a[0]=123;
    a[1]=a[0]; 
    ...
    int index=8;
    a[index]=345;      // runtime error

Polia môžeme vytvoriť aj bez udania počtu elementov poľa priamo inicializáciu textovými konštantami (literálmi). Každé pole obsahuje atribút s hodnotou jeho dĺžky.

    int []b= {3, 5, 8, 9, 1, 4}; 
    boolean []y={true, false, false, true};
    ...
    x=y.length;    // dlzka pola

Pri vytváraní polí objektov postupujeme rovnako, rozdielom je len v tom, že výsledné pole musíme naplniť objektami tak povediac vo 'vlastnej réžii'.

    Castica []m;                  // vytvorenie odkazu na pole
    ...
    m = new Castica[3];           // vytvorenie pola 3x referencii na objekt triedy Castica
    ...
    m[0]=new Castica(0.1,0.5,0.3) // naplnenie pola
    m[1]=new Castica()
    m[2]=new Castica()

Polia môžu byť aj viacrozmerné (môžu reprezentovať napr. obrazové dáta), pracujeme s nimi rovnako ako s jednorozmernými poliami

    int [][]a = new int[2][3];
    ...
    a[0][0]=1;
    a[1][2]=234;

    a[0][2]=a[1][1];

Počet rozmerov poľa nie je obmedzený, polia sa interne v jave ukladajú ako zgrupované jednorozmerné polia. Je možné potom vytvoriť polia, ktoré nemajú štandarnú 'štvorcovú' štruktúru (aj keď neviem,k čomu by to mohlo byť dobré)

    int [][]c = { {0},
                  {1, 2},
                  {3, 4, 5} };

   c[0]0]=100;
   c[0][1]=101;      // chyba
   x=c[1].length;    // vrati dlzku sub-pola