инициализация логического массива в 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 .


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, так что вам может вообще не понадобиться инициализировать.

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


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

5

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.