инициализация логического массива в Java

102

У меня есть этот код

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

может кто-нибудь сказать мне, что именно я здесь делаю не так и как мне это исправить? Мне просто нужно инициализировать все элементы массива логическим значением false. Спасибо

Леба-Лев
источник

Ответы:

285

Мне просто нужно инициализировать все элементы массива логическим значением false.

Либо используйте boolean[]вместо этого, чтобы все значения по умолчанию были false:

boolean[] array = new boolean[size];

Или используйте Arrays#fill()для заполнения всего массива Boolean.FALSE:

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

Также обратите внимание, что индекс массива отсчитывается от нуля. freq[Global.iParameter[2]] = false;Линии , как вы были бы вызвать ArrayIndexOutOfBoundsException. Чтобы узнать больше о массивах в Java, обратитесь к этому базовому руководству Oracle .

BalusC
источник
3
Второй фрагмент кода полезен для случая, когда мы хотим инициализировать его (установить) для всех истинных значений. Отличный ответ!
деспот
3
Я бы предпочел инвертировать имя переменной и использовать инициализацию по умолчанию с ложными значениями.
BalusC
Я на самом деле в пользу , Boolean[] arrayпоскольку это позволяет иметь три состояния для каждого элемента: true, falseи null, что полезно в тех случаях , когда вы хотите , чтобы отметить , что что - то «не обрабатывается».
Abhishek Divekar
20

При выделении массив будет инициализирован значением false.

Все массивы в Java инициализируются значением по умолчанию для типа. Это означает, что массивы int инициализируются значением 0, массивы логических значений инициализируются значением false, а массивы ссылочных типов инициализируются значением null.

Йорген Фог
источник
12
Он использует Boolean, а не boolean, поэтому будет по умолчанию null.
BalusC 02
1
Верный. Я этого не видел. Arrays.fill должен помочь.
Jørgen Fogh
9

Массивы в Java начинают индексирование с 0. Итак, в вашем примере вы имеете в виду элемент, который находится вне массива на единицу.

Вероятно, это должно быть что-то вроде freq [Global.iParameter [2] -1] = false;

Вам нужно будет пройти через массив, чтобы инициализировать его все, эта строка инициализирует только последний элемент.

На самом деле, я почти уверен, что значение false по умолчанию для логических значений в Java, так что вам может вообще не понадобиться инициализировать.

Наилучшие пожелания

Big Endian
источник
2
Он использует Boolean, а не boolean, поэтому будет по умолчанию null.
BalusC 02
5

Они будут инициализированы falseпо умолчанию. В Java массивы создаются в куче, и каждому элементу массива присваивается значение по умолчанию в зависимости от его типа. Для booleanтипа данных значение по умолчанию false.

codaddict
источник
3
Он использует Boolean, а не boolean, поэтому будет по умолчанию null.
BalusC 02
я хотел использовать логическое значение, мой плохой ... извините за
обман
2

общедоступное статическое логическое значение freq [] = новое логическое значение [Global.iParameter [2]];

Global.iParameter [2]:

Это должно быть значение const

один
источник
1
это неправда. также могут быть переменные. проблема в том, что вы используете Global.iParameter [2] для доступа к массиву. но индексы идут от 0 до Global.iParameter [2] -1 !!
Karussell