2009-03-07 18 views
5

Jeśli mam int tablica skonstruowany tak:Jak sprawdzić czy element istnieje w tablicy w Javie

private int[][] map = new int[400][400]; 

I próbuję odzyskać

map[100][200] 

I ten element nie jest inicjowany , dostanę błąd kompilatora/runtime lub zwróci wartość null? Czy istnieje funkcja sprawdzania, czy dany element/indeks istnieje/został ustawiony?

+1

To pytanie może być edytowane tak, aby było bardziej przejrzyste. – Casebash

+0

Proszę zmienić tytuł.wastage tego ..... –

Odpowiedz

11

Ponieważ deklaracja macierzy jest typu pierwotnego, nie otrzymasz żadnych błędów kompilatora ani środowiska wykonawczego - zostanie zwrócona wartość domyślna 0.

Jeśli tablica była tablicą obiektów, to tablica będzie zawierała null dla dowolnego elementu, który nie jest przypisany.

1

nr

Twoje elementy tablicy są tylko na tyle duża, aby pomieścić int s, w tym przypadku. Nie ma miejsca na przechowywanie informacji o tym, czy element "istnieje". Zostało przydzielone, a więc istnieje. W Javie nowo przydzielone macierze int zostaną zainicjowane na wszystkie elementy zero.

3

Nie będę zwracać null ponieważ int jest typem pierwotnym. Zwróci domyślną wartość int, która jest 0.

Nie można ustalić, czy któryś element został ustawiony, poza zachowaniem oddzielnej tablicy boolowskiej.

+0

Jeśli byłaby to tablica niestandardowego obiektu klasy/enum, czy zwróci wartość zerową czy ta pozycja/indeks nie została ustawiona? –

+0

@Click Awans: Tak. –

0

Można użyć checkstyle, pmd i findbugs od źródła (findbugs na binarny) i będą wam takie rzeczy.

Niestety nie wygląda na to, że złapią ten konkretny problem (co ma sens, że macierz ma zagwarantowane, że każdy element ma wartość 0, zero lub fałsz).

Używanie tych narzędzi może przechwycić instancję i członków klasy (które nie są tablicami), które są używane przed podaniem wartości (podobny rodzaj problemu).

0

Trochę martwego tematu, ale znalazłem go przez przypadek, więc zamierzam umieścić moją mądrość (lub cokolwiek: P). Możesz użyć Array.Fill, aby wypełnić tablicę, gdy zostanie utworzona z niepoprawną wartością, np. -1. Następnie możesz łatwo zrobić, jeśli x < 0, aby sprawdzić, czy zainicjowałeś tę konkretną pozycję tablicy, czy też nie. Pomysł ...

Powiązane problemy