1. Szaggatott tömbök

Java programozóként nem csak egy kétdimenziós tömb sorait cserélheti fel, hanem tetszőleges tömböt is létrehozhat.

Tegyük fel, hogy azt szeretné, hogy egy kétdimenziós tömb első sorának hossza legyen 10, a második sorának pedig 50. Megtehetjük? Igen.

Először is létre kell hoznunk egy „tárolók tárolóját” – ez az első tömb, amely sortömbökre mutató hivatkozásokat fog tárolni. Ez így történik:

int[][] name = new int[height][];

Egyszerűen kihagyja a második dimenziót , és a Java gép létrehoz egy konténereket. Ez lesz a memóriában a kód végrehajtása után:

Szaggatott tömbök Java nyelven

És hát, már tudja, hogyan kell egydimenziós tömböket létrehozni 🙂

Így fog kinézni a kapott kód:

// Matrix of important data
int[][] matrix = new int[2][];
matrix[0] = new int[10];
matrix[1] = new int[50]
Kétdimenziós tömb

A nulladik sor egy elemtömb 10Az
első sor egy 50elemtömb

Most hoztunk létre egy úgynevezett " szaggatott tömböt ".

lengthÉs ha most ennek a tömbnek az összes elemét szeretnénk megjeleníteni a képernyőn, akkor jól jön a tömb tulajdonsága: elvégre a tömb sorainak hossza eltérő.

Mellesleg, hogyan találja meg a példánkban a „tárolóedények” hosszát? Ez is egy tömbobjektum, ami azt jelenti, hogy van hossza. A helyes válasz az matrix.length.

Mi a helyzet a sorainkat tartalmazó tömbökkel?matrix[0].length



2. Munkavégzés kétdimenziós tömbbel

Tegyük fel, hogy egy kétdimenziós tömböt szeretne megjeleníteni. Hogyan csinálod, hogy?

A kódunk valahogy így fog kinézni:

int[][] matrix = new int[3][];
matrix[0] = new int[]{1, 2, 3, 4, 5, 6};
matrix[1] = new int[]{1, 2, 3};
matrix[2] = new int[]{1};
for (int i = 0; i < matrix.length; i++) {
   for (int j = 0; j < matrix[i].length; j++)
      System.out.print( matrix[i][j] + " " );
   System.out.println();
}
Tömb létrehozása
Töltse ki a tömböt értékekkel


Külső hurok, amely a tömb sorai fölött iterál.
Belső hurok, amely egy sor celláin ismétlődik.

Két egymásba ágyazott hurokra van szüksége. Az elsőt külsőnek , a másodikat belsőnek nevezzük .

A külső ciklusban (a iváltozóban) egymás után végigmegyünk a kétdimenziós tömbünket alkotó összes soron (tömbön). Minden egyes értéke iaz adott indexet tartalmazó sornak felel meg.

A belső ciklusban (a jváltozóban) a sorok összes celláján áthaladunk. A belső huroknak köszönhetően egy sor jelenik meg a képernyőn, amely egy egydimenziós tömb értékeiből áll.

Ez fog megjelenni:

A tömb egy sora feldolgozásra kerül
1 2 3 4 5 6
A tömb két sora feldolgozásra kerül
1 2 3 4 5 6
1 2 3
A tömb három sora kerül feldolgozásra
1 2 3 4 5 6
1 2 3
1


3. Többdimenziós tömbök

Még egy érdekes tény a tömbökről, amelyet valószínűleg már kitaláltál. Ha tudsz kétdimenziós tömböt készíteni, akkor lehet háromdimenziós tömböt?

Igen, bármilyen méretű tömböt létrehozhat. Az ilyen tömböket „többdimenziósnak” nevezik.

Csak a móka kedvéért hozzunk létre egy többdimenziós tömböt, amelynek 4 dimenziója van.

 int[][][][] matrix = new int[2][3][4][5];

Ez a kód túl egyszerű, nem?

Mi van, ha manuálisan hozza létre?

int[][][][] matrix;
matrix = new int[2][][][];                // Create a 2-element array of references to references to references
for (int i = 0; i < matrix.length; i++)
{
  matrix[i] = new int[3][][];                // Create a 3-element array of references to references
  for (j = 0; j < matrix[i].length; j++)
  {
    matrix[i][j] = new int[4][];             // Create a 4-element array of references
    for (k = 0; k < matrix[i][j].length; k++)
      matrix[i][j][k] = new int[5];          // Create 5-element arrays of integers
  }
}

És ez még csak a tömb létrehozása! Akkor ezzel is dolgozni kell valahogy.

Bónusz feladat: írjon kódot, amely megjeleníti az összes értéket egy háromdimenziós tömbben.