Java logo PredDalej

Polia

Polia v Jave, podobne ako v inych jazykoch, nesu tu istu myslienku: Vytvorit spolocny identifikator pre viac premennych rovnakeho typu.

Polia su v Jave dynamicky vytvarane a mozu byt priradene premennym typu Object. To znamena, ze vsetky metody z triedy Object mozu byt pouzite v ramci pola. Mozno sa Vam bude o chvilu zdat, ze vytvaranie pola je trochu komplikovane a zdlhave, ale je dynamicke!

Aby sme mohli pole pouzivat vo svojom kode, musime ho najprv deklarovat. Samotna deklaracia pozostava z dvoch komponentov. Su to typ a identifikator - meno pola.

Ak chceme deklarovat pole typu Integer, dosiahneme to tymto sposobom:
	Integer[] MenoPola;
Takto sme ho deklarovali. Este ho rozhodne nemozeme pouzivat, pretoze takymto zapisom sme nealokovali ziadnu pamet. Na jej alokovanie pouzijeme operator new:
	Integer[] MenoPola = new Integer[128];
Tu si musime povedat dalsiu vec. Pole, ktore sme prave vyvorili, este urcite nesplna nase predstavy. Nemozeme totiz urobit nasledujucu vec:
	MenoPola[4] = 77;
Preco? Pretoze to, co mame zatial vytvorene, je pole, ale pozostava z referencii na typ Integer. Neobsahuje konkretne prvky typu Integer!

(Mohol by som tu tak tajne urobit taku transformaciu do Cecka: nase pole zatial obsahuje len ukazovatele na prvky typu Integer a nie samotne prvky! V Jave vsak o ukazovateloch nemozeme vobec hovorit, pretoze oficialne neexistuju. To, co mame k dispozicii, volame referencia a je to v podstate ukazovatel, ktory nemozeme presmerovat, pretoze na to nie su ziadne prostriedky.)

Ukazme si ako pripravit pole tak, aby sme s nim boli naozaj spokojni a mohli ho plne vyuzit. Uvediem to cele od zaciatku, aby to bolo jasne.
	Integer[] MenoPola = new Integer[128];

	for (int j=0; j < MenoPola.length; j++)
		MenoPola = new Integer();
	MenoPola[2] = 7;
Pre jednoduche udajove typy, ktore nie su potomkami objektu Object je to jednoduchsie. Vyzera to nasledovne:
	int[] = new int[10];
	int[2] = 24;    // je to mozne!

	float[] meranie = new float[1024];
	meranie[67] = 11;    // aj to je mozne!


Viacrozmerne polia

Je to celkom logicke. Je to analogicke s tym, co uz predpokladam, ze poznate. Pozrite sa na to sami:
import java.io.*;
import java.lang.Integer;

// priklad na dvoj-rozmerne pole

class Array2 {

public static void main(String args[]) {
	int i, j;
	// deklaracia a vytvorenie pola (2D)
	Integer pole[][] = new Integer[4][2];

	// TU si alokujem pamet pre jednotlive prvky
	for (i=0; i<4; i++)
		for (j=0; j<2; j++)
			pole[i][j] = new Integer();

	// TAKTO s nimi pracujem (vypis prvkov pola)
	for (i=0; i<4; i++)
		{
		for (j=0; j<2; j++)
			System.out.print(pole[i][j].toString()+" ");
		System.out.println();
		}

	System.out.println();    // printf("\n");
}

}//class Array2


Na koniec by som sa mohol este vratit k dynamickosti. To, ze Java je interpretovana, prinasa aj jednu vyhodu. Pri pisani kodu nemusime vediet ake velke bude pole, staci ak je to jasne, predtym ako ho ideme alokovat.
Chcete na to priklad? Tu je:
	...
	int pocetPoloziek;
	...
	pocetPoloziek = 8;
	...
	// velkost pola zavisi od predchadzajuceho kodu
	int[] Pole = new int[ pocetPoloziek ];
	...
	Pole[0]=0;  // a ide to!
	...
Tak, toto v Cecku neurobite! (da sa nieco podobne, ale nie takto bezpecne)

Zaciatok