Initialisieren eines booleschen Arrays in Java

102

Ich habe diesen Code

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

Könnte mir jemand sagen, was genau ich hier falsch mache und wie ich es korrigieren würde? Ich muss nur alle Array-Elemente mit Boolean false initialisieren. Danke

leba-lev
quelle

Antworten:

285

Ich muss nur alle Array-Elemente mit Boolean false initialisieren.

Verwenden Sie boolean[]stattdessen stattdessen, damit alle Werte standardmäßig Folgendes verwenden false:

boolean[] array = new boolean[size];

Oder verwenden Sie Arrays#fill(), um das gesamte Array zu füllen mit Boolean.FALSE:

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

Beachten Sie auch, dass der Array-Index auf Null basiert. Die freq[Global.iParameter[2]] = false;Leitung, wie Sie sie dort haben, würde verursachen ArrayIndexOutOfBoundsException. Weitere Informationen zu Arrays in Java finden Sie in diesem grundlegenden Oracle-Lernprogramm .

BalusC
quelle
3
Der zweite Code ist für den Fall von Vorteil, wenn wir ihn auf alle wahren Werte initialisieren (setzen) möchten. Gute Antwort!
Despot
3
Ich würde lieber den Variablennamen umkehren und die Standardinitialisierung mit falschen Werten verwenden.
BalusC
Ich bin eigentlich dafür, Boolean[] arrayda es Ihnen erlaubt, drei Zustände für jedes Element zu haben : true, falseund null, was für Fälle nützlich ist, in denen Sie feststellen möchten, dass etwas "nicht verarbeitet" wird.
Abhishek Divekar
20

Das Array wird beim Zuweisen auf false initialisiert.

Alle Arrays in Java werden auf den Standardwert für den Typ initialisiert. Dies bedeutet, dass Arrays von Ints auf 0 initialisiert werden, Arrays von Booleschen Werten auf false initialisiert werden und Arrays von Referenztypen auf null initialisiert werden.

Jørgen Fogh
quelle
12
Er benutzt Booleannicht boolean, also wird es standardmäßig verwendet null.
BalusC
1
Richtig. Das habe ich nicht gesehen. Arrays.fill sollte den Trick machen.
Jørgen Fogh
9

Arrays in Java beginnen mit der Indizierung bei 0. In Ihrem Beispiel beziehen Sie sich also auf ein Element, das sich um eins außerhalb des Arrays befindet.

Es sollte wahrscheinlich so etwas wie freq [Global.iParameter [2] -1] = false sein;

Sie müssten das Array durchlaufen, um alles zu initialisieren. Diese Zeile initialisiert nur das letzte Element.

Eigentlich bin ich mir ziemlich sicher, dass false für Boolesche Werte in Java Standard ist, sodass Sie möglicherweise überhaupt nicht initialisieren müssen.

Freundliche Grüße

Big Endian
quelle
2
Er benutzt Booleannicht boolean, also wird es standardmäßig verwendet null.
BalusC
5

Sie werden falsestandardmäßig auf initialisiert . In Java werden Arrays auf dem Heap erstellt und jedem Element des Arrays wird je nach Typ ein Standardwert zugewiesen. Für den booleanDatentyp ist der Standardwert false.

Codaddict
quelle
3
Er benutzt Booleannicht boolean, also wird es standardmäßig verwendet null.
BalusC
Ich wollte Boolean verwenden, mein schlechtes ... Entschuldigung für die Irreführung
leba-lev
2

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

Global.iParameter [2]:

Es sollte ein konstanter Wert sein

oneat
quelle
1
das ist nicht wahr. könnte auch Variablen sein. Das Problem ist, dass Sie Global.iParameter [2] verwenden, um auf das Array zuzugreifen. aber die Indizes gehen von 0 bis nur Global.iParameter [2] -1 !!
Karussell