Elméleti alapozás

Java-nyelv néhány összetett adattípusa

 

Tömb

 

A tömb összetett adattípusként a legegyszerűbben fogalmazva egy tárolóobjektum. Benne mindenféle egyszerű típusú adatot, értékét vagy akár már összetett típusú objektumokat is tárolhatunk (akár több dimenzióban is). Számunkra programozás-technikailag nem érdekes, hogy a tárolás módja:

Az bizonyos, hogy egyszerű adattípusok esetén közvetlen, objektumok tárolása esetén pedig közvetett, azaz memóriacímes adattárolás történik.

 

Mivel a tömb maga is objektum, ezért ilyen módon is kell létrehozni; ennek szabványos módja a new parancs kiadása.

 

Kezdjük egyszerű adattípusú tömbök vizsgálatával! Hozzunk létre egy integer típusú, 5 elemből álló tömböt:

 

int[] tomb = new int[5];

 

Ekkor a tömb 5 db int típusú szám fogadására és tárolására lesz képes.

 

A kapcsos zárójelek helyzete a deklaráció első részében kétféle lehet, mindkettő működő megoldás:

 

int tomb[] = new int[5];

int[] tomb = new int[5];

 

Egyéb szintaktika -főként a tömbméret megadásánál-, szintén lényeges, mert ha nem pontos, az Eclipse hibákat fog jelezni:

Viszont a tömbméretezés képes matematikai műveleteket befogadni, ha annak végértéke szintén integer (int):

 

int a = 3;

int b = 4;

int tomb[] = new int[a*b]; //Végeredmény: [12]

 

int tomb[] = new int[Math.pow(3)]; //Végeredmény: [9]

 

int a = 3;

int tomb[] = new int[Math.pow(a)]; //Végeredmény: [9]

 

A deklaráció szigorú követelményeinek egyetlen kivétele a tömb neve (itt tomb), amely a szokásos névadási konvenciók figyelembevételével bármi lehet.

 

Ekkor tehát egy x elemű tárolóobjektum jön létre, amelyet a Java még automatikusan inicializál is 0 kezdőértékekkel. Amint azt az összetett típusú adattárolásnál megszokhattuk, az indexelés mindig 0-nál kezdődik és n-1-nél végződik, ahol n a tömb megadott mérete.

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A tömbműveletek mindig bonyolultak, mert szekvenciális utasítással eléggé nehézkes (és sokszor nem célszerű) a tömb minden egyes eleméhez hozzáférnünk:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        int[] tomb = new int[5];
        System.out.print(tomb[0] + " " + tomb[1] + " " + tomb[2] + " " + tomb[3] + " " + tomb[4]);
    }
}

Végeredmény:

0 0 0 0 0

 

Ezért a tömbtartalom teljes vizsgálatához az optimális módszer az iterálás (for ciklus).

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        int[] tomb = new int[5];
        for(int i = 0; i < tomb.length; i++){
            System.out.print(tomb[i] + " ");
        }
    }
}

Végeredmény:

0 0 0 0 0

 

Láthatjuk, hogy a Java a tömböt automatikusan valóban 0 értékekkel inicializálta.

 

Természetesen a tömböt előre megadott értékekkel is létrehozhatunk...

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        int[] tomb = new int[]{2, 5, 9, 120, 34};
        for(int i = 0; i < tomb.length; i++){
            System.out.print(tomb[i] + " ");
        }
    }
}
 

Végeredmény:

2, 5, 9, 120, 34

 

...illetve objektumok létrehozása esetén is működik (itt String):

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        String[] tomb = new String[]{"Cirbolya", " és ", "Borbolya"};
        for(int i = 0; i < tomb.length; i++){
            System.out.print(tomb[i]);
        }
    }
}
 

Végeredmény:

Cirbolya és Borbolya

 

Van lehetőség a tömb reinicializálásra is. Az alábbi példában a "Cirbolya" string helyére "Füles" kerül:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

public class Main {
    public static void main(String[] args) {
        String[] tomb = new String[]{"Cirbolya", " és ", "Borbolya"};
        for(int i = 0; i < tomb.length; i++){
            System.out.print(tomb[i]);
        }
        System.out.println();
        tomb[0] = "Füles";
        for(int i = 0; i < tomb.length; i++){
            System.out.print(tomb[i]);
        }
    }
}

 

Végeredmény:

Cirbolya és Borbolya

Füles és Borbolya