Rozważać:
int[][] multD = new int[5][];
multD[0] = new int[10];
Czy w ten sposób tworzysz dwuwymiarową tablicę z 5 rzędami i 10 kolumnami?
Widziałem ten kod online, ale składnia nie miała sensu.
Rozważać:
int[][] multD = new int[5][];
multD[0] = new int[10];
Czy w ten sposób tworzysz dwuwymiarową tablicę z 5 rzędami i 10 kolumnami?
Widziałem ten kod online, ale składnia nie miała sensu.
Odpowiedzi:
Spróbuj wykonać następujące czynności:
int[][] multi = new int[5][10];
... co jest skrótem od czegoś 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];
Należy pamiętać, że każdy element zostanie zainicjowany na wartość domyślną dla int
, 0
, 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 }
};
new int[][]
w =new int[][]{...}
wariancie? Czy możemy po prostu pisać ={...}
?
new
słowa kluczowego.
int array[][] = new int[3][];
VS int array[][] = new int[][3];
? który jest legalny, ponieważ gdzieś przeczytałem obie wersje.
Możemy zadeklarować tablicę dwuwymiarową i bezpośrednio przechowywać elementy w momencie jej deklaracji jako:
int marks[][]={{50,60,55,67,70},{62,65,70,70,81},{72,66,77,80,69}};
Tutaj int reprezentuje elementy typu liczb całkowitych przechowywane w tablicy, a nazwa tablicy to „znaczniki”. int jest typem danych dla wszystkich elementów reprezentowanych w nawiasach klamrowych „{” i „}”, ponieważ tablica jest zbiorem elementów o tym samym typie danych.
Wracając do naszego powyższego stwierdzenia: każdy rząd elementów powinien być zapisany w nawiasach klamrowych. Wiersze i elementy w każdym rzędzie powinny być oddzielone przecinkami.
Teraz obserwuj stwierdzenie: możesz uzyskać 3 wiersze i 5 kolumn, więc JVM tworzy 3 * 5 = 15 bloków pamięci. Bloki te można indywidualnie nazywać ta:
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 zapisać n elementów, indeks tablicy zaczyna się od zera i kończy na n-1 . Innym sposobem utworzenia dwuwymiarowej tablicy jest najpierw zadeklarowanie tablicy, a następnie przydzielenie jej pamięci 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];
Możesz je tworzyć tak, jak wspominali inni. Jeszcze jeden punkt do dodania: możesz nawet utworzyć przekrzywioną dwuwymiarową tablicę dla każdego wiersza, niekoniecznie mając taką samą liczbę kolumn, jak poniżej:
int array[][] = new int[3][];
array[0] = new int[3];
array[1] = new int[2];
array[2] = new int[5];
int array[][] = new int[3][];
VS int array[][] = new int[][3];
? który jest legalny, ponieważ gdzieś przeczytałem obie wersje.
Najczęstszym idiomem do tworzenia dwuwymiarowej tablicy z 5 wierszami i 10 kolumnami jest:
int[][] multD = new int[5][10];
Alternatywnie możesz użyć następujących, które są bardziej podobne do tego, co masz, chociaż musisz jawnie zainicjować każdy wiersz:
int[][] multD = new int[5][];
for (int i = 0; i < 5; i++) {
multD[i] = new int[10];
}
Object[][] ary2d = new Object[5][10];
, nadal musisz zainicjować każdy element tablicy 2D.
null
bezpiecznie obchodzisz się ze skrzynką w przypadku jakichkolwiek prymitywów. To, czy powinieneś zainicjować każdy element, zależy całkowicie od twojego projektu. Ponadto, aby wyjaśnić - prymitywy nie mogą mieć wartości zerowej i zostaną utworzone do określonej wartości domyślnej, jeśli nie zostanie ona przez ciebie przypisana. Np. An int
nie może być zerowy, a gdy mówisz int i;
bez przypisania wartości, 0
używana jest domyślna z . Przeczytaj o tym tutaj
Próbować:
int[][] multD = new int[5][10];
Zauważ, że w twoim kodzie tylko pierwsza linia tablicy 2D jest inicjowana na 0. Linia 2 do 5 nawet nie istnieje. Jeśli spróbujesz je wydrukować, dostaniesz null
za każdego z nich.
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
W Javie tablica dwuwymiarowa może być zadeklarowana jako taka sama jak tablica jednowymiarowa. W jednowymiarowej tablicy możesz pisać jak
int array[] = new int[5];
gdzie int jest typem danych, tablica [] jest deklaracją tablicową i new array
jest tablicą z obiektami o pięciu indeksach.
W ten sposób możesz napisać tablicę dwuwymiarową w następujący sposób.
int array[][];
array = new int[3][4];
Oto array
typ danych int. Najpierw zadeklarowałem tablicę jednowymiarową tego typu, a następnie tworzona jest tablica z 3 wierszami i 4 kolumnami.
W twoim kodzie
int[][] multD = new int[5][];
multD[0] = new int[10];
oznacza, że utworzyłeś dwuwymiarową tablicę z pięcioma rzędami. W pierwszym rzędzie znajduje się 10 kolumn. W Javie możesz wybrać rozmiar kolumny dla każdego wiersza, jak chcesz.
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;
}
}
Cieszyć się!
Wypróbuj w ten sposób:
int a[][] = {{1,2}, {3,4}};
int b[] = {1, 2, 3, 4};
Te typy tablic w Javie są nazywane tablicami postrzępionymi:
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 rząd pomieści trzy kolumny, drugi rząd pomieści dwie kolumny, a trzeci rząd pięć kolumn. Możesz zainicjalizować tę tablicę w czasie 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();
}
W rzeczywistości Java nie ma macierzy wielowymiarowej w sensie matematycznym. Java ma tylko tablicę tablic, tablicę, w której każdy element jest również tablicą. Dlatego bezwzględnym wymogiem do jego zainicjowania jest rozmiar pierwszego wymiaru. Jeśli reszta zostanie określona, utworzy tablicę wypełnioną wartością domyślną.
int[][] ar = new int[2][];
int[][][] ar = new int[2][][];
int[][] ar = new int[2][2]; // 2x2 array with zeros
Daje nam to także dziwactwo. Rozmiar pod-tablicy nie może być zmieniony poprzez dodanie większej liczby elementów, ale możemy to zrobić, przypisując nową tablicę o dowolnym rozmiarze.
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