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.
java
multidimensional-array
AppSensei
źródło
źródło
Odpowiedzi:
Spróbuj wykonać następujące czynności:
... co jest skrótem od czegoś takiego:
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:źródło
new int[][]
w=new int[][]{...}
wariancie? Czy możemy po prostu pisać={...}
?new
słowa kluczowego.int array[][] = new int[3][];
VSint 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:
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:
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.
Łącząc powyższe dwa, możemy napisać:
źródło
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:
źródło
int array[][] = new int[3][];
VSint 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:
Alternatywnie możesz użyć następujących, które są bardziej podobne do tego, co masz, chociaż musisz jawnie zainicjować każdy wiersz:
źródło
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. Anint
nie może być zerowy, a gdy mówiszint i;
bez przypisania wartości,0
używana jest domyślna z . Przeczytaj o tym tutajMożna to również zadeklarować w następujący sposób. To nie jest dobry projekt, ale działa.
źródło
Próbować:
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.źródło
źródło
W Javie tablica dwuwymiarowa może być zadeklarowana jako taka sama jak tablica jednowymiarowa. W jednowymiarowej tablicy możesz pisać jak
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.
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
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.
źródło
Cieszyć się!
źródło
Wypróbuj w ten sposób:
źródło
Te typy tablic w Javie są nazywane tablicami postrzępionymi:
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:
Możesz łatwo iterować wszystkie elementy w tablicy:
źródło
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ą.
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.
źródło