inicializando uma matriz booleana em java

102

Eu tenho este código

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

alguém poderia me dizer o que exatamente estou fazendo de errado aqui e como eu corrigiria? Eu só preciso inicializar todos os elementos do array como Boolean false. obrigado

Leba-lev
fonte

Respostas:

285

Eu só preciso inicializar todos os elementos do array como Boolean false.

Em boolean[]vez disso, use para que todos os valores sejam false:

boolean[] array = new boolean[size];

Ou use Arrays#fill()para preencher a matriz inteira com Boolean.FALSE:

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

Observe também que o índice da matriz é baseado em zero. A freq[Global.iParameter[2]] = false;linha como você causaria ArrayIndexOutOfBoundsException. Para saber mais sobre arrays em Java, consulte este tutorial básico do Oracle .

BalusC
fonte
3
A segunda parte do código é benéfica para o caso em que queremos inicializá-lo (configurá-lo) com todos os valores verdadeiros. Ótima resposta!
déspota
3
Prefiro inverter o nome da variável e usar a inicialização padrão com valores falsos.
BalusC
Estou realmente em favor de Boolean[] arrayuma vez que lhe permite ter três estados para cada elemento: true, falsee null, o que é útil para casos em que você deseja observar que algo é "não processados".
Abhishek Divekar
20

A matriz será inicializada como falsa quando você a alocar.

Todos os arrays em Java são inicializados com o valor padrão do tipo. Isso significa que arrays de ints são inicializados com 0, arrays de booleanos são inicializados com false e arrays de tipos de referência são inicializados com null.

Jørgen Fogh
fonte
12
Ele está usando Boolean, não boolean, então o padrão será null.
BalusC
1
Corrigir. Eu não vi isso. Arrays.fill deve resolver o problema.
Jørgen Fogh
9

Arrays em Java começam a indexação em 0. Portanto, em seu exemplo, você está se referindo a um elemento que está fora do array por um.

Provavelmente deve ser algo como freq [Global.iParameter [2] -1] = false;

Você precisaria fazer um loop pela matriz para inicializar tudo isso, esta linha inicializa apenas o último elemento.

Na verdade, tenho quase certeza de que false é o padrão para booleanos em Java, portanto, talvez você nem precise inicializar.

Cumprimentos

Big Endian
fonte
2
Ele está usando Boolean, não boolean, então o padrão será null.
BalusC
5

Eles serão inicializados falsepor padrão. Em Java, os arrays são criados no heap e cada elemento do array recebe um valor padrão, dependendo de seu tipo. Para o booleantipo de dados, o valor padrão é false.

codadicto
fonte
3
Ele está usando Boolean, não boolean, então o padrão será null.
BalusC
Eu pretendia usar booleano, meu mal ... desculpe pelo erro
leba-lev,
2

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

Global.iParameter [2]:

Deve ser um valor const

uma vez
fonte
1
isso não é verdade. podem ser variáveis ​​também. o problema é que você está usando Global.iParameter [2] para acessar o array. mas os índices vão de 0 até apenas Global.iParameter [2] -1 !!
Karussell,