|
8. Taulukot
Taulukko muodostuu kokoelmasta samantyyppisiä muuttujia, joihin voidaan
viitata yhteisellä nimellä. Yksiulotteiset taulukot ovat yleisimpiä, mutta
Javassa taulukko voi olla myös moniulotteinen. Taulukot tarjoavat tavan
ryhmitellä toisiinsa liittyviä muuttujia. Taulukko on esimerkiksi
käyttökelpoinen tilastoitaessa kuukauden päivän korkeimpia
lämpötiloja.
8.1 Yksiulotteinen taulukko
Seuraavassa on esitetty yksiulotteisen taulukon määrittely.
int noppa[];
noppa = new int[6];
Vaihtoehtoiset tavat taulukon varaamiselle, joissa esittely ja muistin
varaaminen tehdään samassa lauseessa, ovat seuraavanlaiset.
int noppa[] = new int[6];
int[] noppa = new int[6];
Javassa taulukon tyyppinä voi olla mikä
tahansa alkeistietotyyppi tai olio. Taulukon kaikki alkiot ovat samaa
tyyppiä. Edellisissä esimerkeissä taulukon tyyppinä on kokonaisluku.
Tyhjät hakasulut ilmoittavat kääntäjälle taulukon luonnista. Taulukkoon
enimmillään tulevien alkioiden määrä on annettava taulukon
luontivaiheessa. Edellisissä esimerkeissä taulukkoon mahtuu kuusi alkiota.
Taulukot ovat olioita Javassa, joten ne luodaan new-operaattorilla niin
kuin muutkin oliot.
Taulukko voidaan alustaa määrittelyn jälkeen. Taulukossa käytetään
indeksinumeroita . Indeksointi alkaa
paikasta 0, ja viimeinen paikka on taulukon koko miinus yksi. Edellä
määritellyn noppa-taulukon alkiot ovat siis noppa[0]... noppa[5].
Kukin taulukon alkio voidaan alustaa erikseen.
noppa[0] = 0;
noppa[1] = 0;
noppa[2] = 0;
noppa[3] = 0;
noppa[4] = 0;
noppa[5] = 0;
On suositeltavaa käyttää indeksinä luvun sijasta muuttujia. Seuraavassa
onkin edellistä parempi tapa alustaa kaikki kokonaislukutaulukon arvot
nollaksi.
for (int i = 0; i < 6; i++) {
nopppa[i] = 0; }
Taulukon alustaminen voidaan tehdä jo esittelyn yhteydessä. Tällöin
samalla määräytyy taulukon koko, jota ei voi ohjelmassa
muuttaa.
int[] noppa = {3, 4, 1, 6, 1};
Taulukon rajojen ylittäminen tai alittaminen on ajonaikainen virhe.
Java generoi viestin viittauksesta varaamattomaan taulukon indeksiin, joka
on poikkeus ArrayIndexOutOfBounds.
Taulukon pituus saadaan
length-ominaisuuden avulla. Seuraavassa on esimerkki merkkijonotaulukosta,
jossa tulostetaan kaikki alkiot käyttäen taulukon pituutta.
String[] nimet = {"Aku", "Tupu", "Hupu", "Lupu"} //merkkijonotaulukon alustus
// Kaikkien merkkijonotaulukon arvojen tulostus.
for (int i=0; i < nimet.length; i++) {
System.out.print(nimet[i] + " "); }
8.2 Moniulotteinen taulukko
Yksinkertaisin moniulotteisista taulukoista on kaksiulotteinen
taulukko. Seuraavassa esimerkki kaksiulotteisen taulukon käytöstä.
class Luvut {
public static void main(String args[]) {
int luvut[ ] [ ] = {
{1, 100},
{3, 256},
{5, 456},
{6, 234},
{7, 345},
{9, 123} };
for (int i=0; i< 6; i++) {
for (int j=0; j <2; j++) {
System.out.print(luvut[i][j] + " ");
}
System.out.println();
}
}
}
Esimerkkiohjelma tulostaa:
1 100
3 256
5 456
6 234
7 345
9 123
Moniulotteisen taulukon määrittelyn yleinen muoto on tyyppi nimi
[][]...[] = new tyyppi[koko1][koko2]...[kokoN].
Seuraava esittely luo 3x10x4-kokoisen kolmiulotteisen taulukon.
int kolmiulot[][][] = new int[3][10][4];
|