inicjalizacja tablicy boolowskiej w java

102

Mam ten kod

public static Boolean freq[] = new Boolean[Global.iParameter[2]];
freq[Global.iParameter[2]] = false;

czy ktoś mógłby mi powiedzieć, co dokładnie robię źle i jak mam to poprawić? Muszę tylko zainicjować wszystkie elementy tablicy na wartość Boolean false. Dziękuję Ci

leba-lev
źródło

Odpowiedzi:

285

Muszę tylko zainicjować wszystkie elementy tablicy na wartość Boolean false.

boolean[]Zamiast tego użyj , aby wszystkie wartości miały wartość domyślną false:

boolean[] array = new boolean[size];

Lub użyj, Arrays#fill()aby wypełnić całą tablicę Boolean.FALSE:

Boolean[] array = new Boolean[size];
Arrays.fill(array, Boolean.FALSE);

Należy również zauważyć, że indeks tablicy jest liczony od zera. freq[Global.iParameter[2]] = false;Linia jak masz tam spowodowałaby ArrayIndexOutOfBoundsException. Aby dowiedzieć się więcej o tablicach w Javie, zapoznaj się z tym podstawowym samouczkiem Oracle .

BalusC
źródło
3
Drugi fragment kodu jest korzystny w przypadku, gdy chcemy go zainicjalizować (ustawić) na wszystkie wartości prawdziwe. Świetna odpowiedź!
despot
3
Wolę odwrócić nazwę zmiennej i użyć domyślnej inicjalizacji z fałszywymi wartościami.
BalusC
Jestem faktycznie na korzyść Boolean[] array, ponieważ pozwala mieć trzy stany: dla każdego elementu true, falseoraz null, co jest przydatne w przypadkach, gdy chcesz, aby pamiętać, że coś jest „nie przetworzone”.
Abhishek Divekar
20

Tablica zostanie zainicjowana na false podczas jej przydzielania.

Wszystkie tablice w Javie są inicjowane z domyślną wartością dla tego typu. Oznacza to, że tablice wartości typu int są inicjalizowane na 0, tablice wartości logicznych są inicjowane na wartość false, a tablice typów referencyjnych są inicjowane na wartość null.

Jørgen Fogh
źródło
12
Używa Boolean, nie boolean, więc domyślnie null.
BalusC
1
Poprawny. Nie widziałem tego. Arrays.fill powinno załatwić sprawę.
Jørgen Fogh
9

Tablice w Javie rozpoczynają indeksowanie od 0. W naszym przykładzie odnosisz się o jeden do elementu, który jest poza tablicą.

Prawdopodobnie powinno to być coś w rodzaju freq [Global.iParameter [2] -1] = false;

Musiałbyś przejść przez tablicę, aby zainicjować ją całą, ta linia inicjalizuje tylko ostatni element.

Właściwie jestem prawie pewien, że wartość false jest domyślna dla wartości logicznych w Javie, więc może nie być konieczna inicjalizacja.

Z poważaniem

Big Endian
źródło
2
Używa Boolean, nie boolean, więc domyślnie null.
BalusC
5

Zostaną zainicjalizowane falsedomyślnie. W Javie tablice tworzone są na stercie i każdemu elementowi tablicy przypisywana jest domyślna wartość zależna od jego typu. Dla booleantypu danych wartością domyślną jest false.

codaddict
źródło
3
Używa Boolean, nie boolean, więc domyślnie null.
BalusC
chciałem użyć wartości logicznej, mój zły ... przepraszam za błąd
leba-lev
2

public static Boolean freq [] = new Boolean [Global.iParameter [2]];

Global.iParameter [2]:

Powinna mieć wartość stałą

oneat
źródło
1
to nie jest prawda. mogą być również zmiennymi. problem polega na tym, że używasz Global.iParameter [2], aby uzyskać dostęp do tablicy. ale indeksy idą od 0 do tylko Global.iParameter [2] -1 !!
Karussell