inicializando una matriz booleana en java

102

Tengo este codigo

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

¿Podría alguien decirme qué estoy haciendo mal aquí exactamente y cómo lo corregiría? Solo necesito inicializar todos los elementos de la matriz a booleano falso. gracias

leba-lev
fuente

Respuestas:

285

Solo necesito inicializar todos los elementos de la matriz a booleano falso.

Utilice boolean[]en su lugar para que todos los valores por defecto sean false:

boolean[] array = new boolean[size];

O use Arrays#fill()para llenar toda la matriz con Boolean.FALSE:

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

También tenga en cuenta que el índice de la matriz se basa en cero. La freq[Global.iParameter[2]] = false;línea como la has causado allí ArrayIndexOutOfBoundsException. Para obtener más información sobre las matrices en Java, consulte este tutorial básico de Oracle .

BalusC
fuente
3
El segundo fragmento de código es beneficioso para el caso en el que queremos inicializarlo (establecerlo) en todos los valores verdaderos. ¡Gran respuesta!
déspota
3
Prefiero invertir el nombre de la variable y usar la inicialización predeterminada con valores falsos.
BalusC
De hecho, estoy a favor de Boolean[] arraylo que le permite tener tres estados para cada elemento: true, falsey null, lo que es útil para los casos en los que desee tener en cuenta que algo es "no procesado".
Abhishek Divekar
20

La matriz se inicializará en falso cuando la asigne.

Todas las matrices en Java se inicializan con el valor predeterminado para el tipo. Esto significa que las matrices de ints se inicializan en 0, las matrices de valores booleanos se inicializan en falso y las matrices de tipos de referencia se inicializan en nulo.

Jørgen Fogh
fuente
12
Está usando Boolean, no boolean, por lo que lo hará de forma predeterminada null.
BalusC
1
Correcto. Yo no vi eso. Arrays.fill debería hacer el truco.
Jørgen Fogh
9

Las matrices en Java comienzan a indexarse ​​en 0. Entonces, en su ejemplo, se está refiriendo a un elemento que está fuera de la matriz en uno.

Probablemente debería ser algo como freq [Global.iParameter [2] -1] = false;

Necesitaría recorrer la matriz para inicializar todo, esta línea solo inicializa el último elemento.

En realidad, estoy bastante seguro de que false es el valor predeterminado para los valores booleanos en Java, por lo que es posible que no necesite inicializar en absoluto.

Atentamente

Big Endian
fuente
2
Está usando Boolean, no boolean, por lo que lo hará de forma predeterminada null.
BalusC
5

Se inicializarán en falseforma predeterminada. En Java, las matrices se crean en el montón y cada elemento de la matriz recibe un valor predeterminado según su tipo. Para booleanel tipo de datos, el valor predeterminado es false.

codaddict
fuente
3
Está usando Boolean, no boolean, por lo que lo hará de forma predeterminada null.
BalusC
quise usar booleano, mi mal ... perdón por el engaño
leba-lev
2

frec booleana estática pública [] = nueva booleana [Global.iParameter [2]];

Global.iParameter [2]:

Debe ser un valor constante

oneat
fuente
1
esto no es verdad. también podrían ser variables. el problema es que está utilizando Global.iParameter [2] para acceder a la matriz. pero los índices van desde 0 hasta solo Global.iParameter [2] -1 !!
Karussell