Składnia tworzenia tablicy dwuwymiarowej w Javie

Rozważmy:

int[][] multD = new int[5][];
multD[0] = new int[10];

Czy w ten sposób tworzy się dwuwymiarową tablicę z 5 wierszami i 10 kolumnami?

Widziałem ten kod w Internecie, ale składnia nie miała sensu.

Author: payne, 2012-09-01

12 answers

Spróbuj:

int[][] multi = new int[5][10];

... czyli krótka ręka na coś takiego:

int[][] multi = new int[5][];
multi[0] = new int[10];
multi[1] = new int[10];
multi[2] = new int[10];
multi[3] = new int[10];
multi[4] = new int[10];

Zauważ, że każdy element zostanie zainicjowany do wartości domyślnej dla int, 0, tak więc powyższe są również równoważne:

int[][] multi = new int[][]{
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
  { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
};
 842
Author: obataku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-21 18:04:34

Możemy zadeklarować tablicę dwuwymiarową i bezpośrednio przechowywać elementy w czasie jej deklaracji jako:

int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};

Tutaj int przedstawia elementy typu integer zapisane w tablicy, a nazwa tablicy to 'marks'. int jest typem danych dla wszystkich elementów reprezentowanych w klamrach " {"i"}", ponieważ tablica jest zbiorem elementów o tym samym typie danych.

Wracając do naszej wypowiedzi napisanej powyżej: każdy wiersz elementów powinien być napisany wewnątrz kręcone szelki. Wiersze i elementy w każdym wierszu powinny być oddzielone przecinkami.

Teraz obserwuj instrukcję: możesz uzyskać 3 wiersze i 5 kolumn, więc JVM tworzy 3 * 5 = 15 bloków pamięci. Bloki te mogą być indywidualnie określane jako:

marks[0][0]  marks[0][1]  marks[0][2]  marks[0][3]  marks[0][4]
marks[1][0]  marks[1][1]  marks[1][2]  marks[1][3]  marks[1][4]
marks[2][0]  marks[2][1]  marks[2][2]  marks[2][3]  marks[2][4]


Uwaga:
Jeśli chcesz przechowywać N elementy, to indeks tablicy zaczyna się od zera i kończy na n-1. Innym sposobem tworzenia tablicy dwuwymiarowej jest zadeklarowanie tablicy jako pierwszej i następnie przypisanie pamięci do niego za pomocą nowego operatora.

int marks[][];           // declare marks array
marks = new int[3][5];   // allocate memory for storing 15 elements

Łącząc powyższe dwa możemy napisać:

int marks[][] = new int[3][5];
 80
Author: Indu Joshi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-24 04:03:02

Możesz je tworzyć tak, jak inni wspominali. Jeszcze jeden punkt do dodania: możesz nawet utworzyć przekrzywioną tablicę dwuwymiarową z każdym wierszem, niekoniecznie mającą tę samą liczbę collumnów, jak to:

int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];
 53
Author: Victor Mukherjee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 22:32:19

Najczęstszym idiomem do tworzenia tablicy dwuwymiarowej z 5 rzędy i 10 kolumny to:

int[][] multD = new int[5][10];

Alternatywnie, możesz użyć następującego wzoru, który jest bardziej podobny do tego, co masz, chociaż musisz jawnie zainicjalizować każdy wiersz:

int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
  multD[i] = new int[10];
}
 30
Author: João Silva,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-01 21:20:17

Możliwe jest również zadeklarowanie go w następujący sposób. To nie jest dobry projekt, ale działa.

int[] twoDimIntArray[] = new int[5][10];
 12
Author: ctomek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 22:37:44

Try:

int[][] multD = new int[5][10];

Zauważ, że w Twoim kodzie tylko pierwsza linia tablicy 2D jest inicjalizowana na 0. Linie od 2 do 5 nawet nie istnieją. Jeśli spróbujesz je wydrukować, dostaniesz null za każdego z nich.

 9
Author: dcernahoschi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 22:31:30
int [][] twoDim = new int [5][5];

int a = (twoDim.length);//5
int b = (twoDim[0].length);//5

for(int i = 0; i < a; i++){ // 1 2 3 4 5
    for(int j = 0; j <b; j++) { // 1 2 3 4 5
        int x = (i+1)*(j+1);
        twoDim[i][j] = x;
        if (x<10) {
            System.out.print(" " + x + " ");
        } else {
            System.out.print(x + " ");
        }
    }//end of for J
    System.out.println();
}//end of for i
 8
Author: Kieran Horton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-09 09:11:27

W Javie tablica dwuwymiarowa może być zadeklarowana jako taka sama jak tablica jednowymiarowa. W tablicy jednowymiarowej można zapisać jak

  int array[] = new int[5];

Gdzie int jest typem danych, array [] jest deklaracją array, a {[3] } jest tablicą z obiektami z pięcioma indeksami.

W ten sposób można zapisać tablicę dwuwymiarową w następujący sposób.

  int array[][];
  array = new int[3][4];

TUTAJ array jest typem danych int. Najpierw zadeklarowałem na jednowymiarowej tablicy tego typu, potem 3 wiersz i 4 kolumna tablica jest tworzona.

W Twoim kodzie

int[][] multD = new int[5][];
multD[0] = new int[10];

Oznacza, że stworzyłeś dwuwymiarową tablicę z pięcioma wierszami. W pierwszy wiersz zawiera 10 kolumn. W języku Java możesz wybrać rozmiar kolumny dla każdego wiersza.

 8
Author: Zishan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-09 22:36:48
int rows = 5;
int cols = 10;

int[] multD = new int[rows * cols];

for (int r = 0; r < rows; r++)
{
  for (int c = 0; c < cols; c++)
  {
     int index = r * cols + c;
     multD[index] = index * 2;
  }
}
Smacznego!
 7
Author: Albeoris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-23 11:28:41

Spróbuj w ten sposób:

int a[][] = {{1,2}, {3,4}};

int b[] = {1, 2, 3, 4};
 4
Author: Piyush Bulchandani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-11 02:14:17

Tego typu tablice są znane jako postrzępione tablice w Javie:

int[][] multD = new int[3][];
multD[0] = new int[3];
multD[1] = new int[2];
multD[2] = new int[5];

W tym scenariuszu każdy wiersz tablicy zawiera inną liczbę kolumn. W powyższym przykładzie pierwszy wiersz będzie zawierał trzy kolumny, drugi wiersz będzie zawierał dwie kolumny, a trzeci wiersz będzie zawierał pięć kolumn. Możesz zainicjalizować tę tablicę podczas kompilacji jak poniżej:

 int[][] multD = {{2, 4, 1}, {6, 8}, {7, 3, 6, 5, 1}};

Możesz łatwo iterować wszystkie elementy w tablicy:

for (int i = 0; i<multD.length; i++) {
    for (int j = 0; j<multD[i].length; j++) {
        System.out.print(multD[i][j] + "\t");
    }
    System.out.println();
}
 3
Author: ritesh9984,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-11 02:17:16

W rzeczywistości Java nie ma tablicy wielowymiarowej w sensie matematycznym. To, co ma Java, to tylko tablica tablic, tablica, w której każdy element jest również tablicą. Dlatego absolutnym wymogiem inicjalizacji Jest Rozmiar pierwszego wymiaru. Jeśli podano resztę, to utworzy tablicę z wartością domyślną.

int[][]   ar  = new int[2][];
int[][][] ar  = new int[2][][];
int[][]   ar  = new int[2][2]; // 2x2 array with zeros
To również daje nam dziwactwo. Rozmiar tablicy podrzędnej nie może być zmieniony przez dodanie większej liczby elementów, ale możemy to zrobić poprzez przypisanie nowej tablicy dowolnych rozmiarów.
int[][]   ar  = new int[2][2];
ar[1][3] = 10; // index out of bound
ar[1]    = new int[] {1,2,3,4,5,6}; // works
 1
Author: inmyth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-01 10:31:15