Składnia tworzenia tablicy dwuwymiarowej

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: Peter Mortensen, 2012-09-02

11 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 }
};
 702
Author: oldrinb,
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];
 64
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];
 41
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];
}
 25
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

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.

 7
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

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.

 7
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

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];
 7
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
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
 6
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
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!
 4
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};
 2
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();
}
 1
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