ініціалізація булевого масиву в Java


102

У мене цей код

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

хтось міг би сказати мені, що саме я роблю тут не так і як би це виправити? Мені просто потрібно ініціалізувати всі елементи масиву до булевих помилок. спасибі

Відповіді:


285

Мені просто потрібно ініціалізувати всі елементи масиву до булевих помилок.

Або 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, що корисно в тих випадках , коли ви хочете , щоб відзначити , що що - то «не обробляється».
Абхішек Дівекар

20

Масив буде ініціалізований на false, коли ви виділите його.

Усі масиви в Java ініціалізуються до значення за замовчуванням для типу. Це означає, що масиви ints ініціалізуються на 0, масиви булевих ініціалізованих до false, а масиви посилальних типів ініціалізуються на null.


12
Він використовує Boolean, ні boolean, тому це буде за замовчуванням null.
BalusC

1
Правильно. Я цього не бачив. Arrays.fill повинен зробити свою справу.
Jørgen Fogh

9

Масиви в Java починають індексувати з 0. Отже, у своєму прикладі ви посилаєтесь на елемент, який знаходиться поза масивом одним.

Ймовірно, це має бути щось на зразок freq [Global.iParameter [2] -1] = false;

Вам потрібно буде провести цикл через масив, щоб ініціалізувати все це, цей рядок ініціалізує лише останній елемент.

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

З найкращими побажаннями


2
Він використовує Boolean, ні boolean, тому це буде за замовчуванням null.
BalusC

5

Вони будуть ініціалізовані falseза замовчуванням. У Java масиви створюються на купі, і кожному елементу масиву надається значення за замовчуванням залежно від його типу. Для booleanтипу даних типовим є значення за замовчуванням false.


3
Він використовує Boolean, ні boolean, тому це буде за замовчуванням null.
BalusC

я мав намір використати булевий, мій поганий ... вибачте за оману
leba-lev

2

public static boolean freq [] = новий булевий [Global.iParameter [2]];

Global.iParameter [2]:

Це має бути значення const


1
це не правда. також можуть бути змінними. проблема полягає в тому, що ви використовуєте Global.iParameter [2] для доступу до масиву. але показники йдуть від 0 до тих пір, поки тільки Global.iParameter [2] -1 !!
Каруссел
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.