Elméleti alapozás
Java-nyelv néhány összetett adattípusa
Kétdimenziós tömb
Az előző fejezet bevezetőjében több dimenziós tömb lehetőségéről is szó esett. Mit is jelent ez?
Alapértelmezésben egy egyszerű tömb 1 dimenziós kiterjedésű, azaz egyetlen "oszlopnyi" (más értelmezésben sornyi) adattárolást tartalmaz, de van lehetőség van 2 (vagy 3) dimenziós tömbök létrehozására is, ekkor már (a 2 dimenziós esetben) egy Excel-táblához hasonlóan sorokról és oszlopokról beszélhetünk. Az alábbi ábra bal oldalán egy 1 dimenziós (1x6), jobb oldalon pedig egy 2 dimenziós tömb elvi rajzát láthatjuk (2x6):
De mi értelme a 2 dimenziós tömbnek?
Gondoljunk csak a Full HD (BT. 709) képmegjelenítő szabványra, amely a tűéles képalkotáshoz 1080x920 képpontot definiál. Ha tehát adott egy ilyen terjedelmű 2 dimenziós tömb, amelynek elemeit RGB-színkoordinátákkal töltjük fel, akkor (elméletileg) képesek vagyunk egy ekkora felbontású kép információinak tárolására. Ekkor már egy mátrixot határoztunk meg, amely a számítógépes grafika egyik legfontosabb matematikai alkotóeleme.
saját típus[][] tombFHD = new saját típus[1080][920];
(A deklaráció csak elméleti megközelítés, ezért nem adtam meg Java-specifikus tömbtípust.)
Most hozzunk létre és 1, 2, 3, 4 értékekkel rögtön inicializáljunk egy 4 elemű, int típusú 2 dimenziós tömböt!
public class Main {
public static void main(String[] args) {
int ketdimenziosTomb[][] = new int[2][2];
ketdimenziosTomb[0][0] = 1;
ketdimenziosTomb[0][1] = 2;
ketdimenziosTomb[1][0] = 3;
ketdimenziosTomb[1][1] = 4;
for (int i = 0; i < ketdimenziosTomb.length; i++) {
for (int j = 0; j <
ketdimenziosTomb.length; j++) {
System.out.print(ketdimenziosTomb[i][j]+ " ");
}
}
}
}
Végeredmény:
1 2 3 4
A 2 fenti inicializálás valójában "kézi" volt, mert a tömbelemeket egyesével adtuk meg. A for ciklus használatával az inicializálás automatizálható (legalábbis sok esetben):
public class
Main {
public static void main(String[] args) {
int ketdimenziosTomb[][] = new int[2][2];
int szamlalo = 1;
for (int i = 0; i < ketdimenziosTomb.length; i++) {
for (int j = 0; j <
ketdimenziosTomb.length; j++) {
ketdimenziosTomb[i][j] = szamlalo;
System.out.print(ketdimenziosTomb[i][j] + " ");
szamlalo++;
}
}
}
}
Végeredmény:
1 2 3 4
Természetesen az inicializálást többféle adattípussal is megtehetjük. Alább például egy String típusú és "kézi" inicializálást tanulmányozhatunk, még pedig kétféle módon:
public class
Main {
public static void main(String[] args) {
String ketdimenziosTomb[][] = new String[2][2];
ketdimenziosTomb[0][0] = "A";
ketdimenziosTomb[0][1] = "B";
ketdimenziosTomb[1][0] = "C";
ketdimenziosTomb[1][1] = "D";
for (int i = 0; i < ketdimenziosTomb.length; i++) {
for (int j = 0; j <
ketdimenziosTomb.length; j++) {
System.out.print(ketdimenziosTomb[i][j] + " ");
}
}
}
}
Végeredmény:
A B C D
public class
Main {
public static void main(String[] args) {
String ketdimenziosTomb[][] = new String[][]{{"A","B"},{"C","D"}};
for (int i = 0; i < ketdimenziosTomb.length; i++) {
for (int j = 0; j <
ketdimenziosTomb.length; j++) {
System.out.print(ketdimenziosTomb[i][j] + " ");
}
}
}
}
Végeredmény:
A B C D
A kétdimenziós tömb egy speciális esete az úgynevezett aszimmetrikus kétdimenziós tömb, amelynek oszlop-, vagy sorszámai különbözők. Az ilyen jellegű tömbműveletkor azonban ügyelnünk kell arra, hogy lekezeljük a különböző dimenzióhosszakat is (az alábbi példában: ketdimenziosTomb[i].length):
public class
Main {
public static void main(String[] args) {
String ketdimenziosTomb[][] = new String[][]{
{"1", "2"},
{"3", "4", "5"},
};
for (int i = 0; i < ketdimenziosTomb.length; i++) {
for (int j = 0; j <
ketdimenziosTomb[i].length; j++) {
System.out.print(ketdimenziosTomb[i][j] + " ");
}
}
}
}
Végeredmény:
1 2 3 4 5
A kétdimenziós tömbökről (másik nevükön mátrix) részletesen szó esik még a Műveletek mátrixban című fejezetben.