java'da bir boole dizisi başlatılıyor


102

Bu koda sahibim

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

birisi bana burada tam olarak neyi yanlış yaptığımı söyleyebilir mi ve bunu nasıl düzeltebilirim? Sadece tüm dizi elemanlarını yanlış Boolean olarak başlatmam gerekiyor. teşekkür ederim

Yanıtlar:


285

Sadece tüm dizi elemanlarını yanlış Boolean olarak başlatmam gerekiyor.

Ya boolean[]bunun yerine kullanın, böylece tüm değerler varsayılan olarak false:

boolean[] array = new boolean[size];

VeyaArrays#fill() tüm diziyi şununla doldurmak için kullanın Boolean.FALSE:

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

Ayrıca dizi dizininin sıfır tabanlı olduğuna dikkat edin. freq[Global.iParameter[2]] = false;Satır orada neden olur ettik olarak ArrayIndexOutOfBoundsException. Java'daki diziler hakkında daha fazla bilgi edinmek için bu temel Oracle eğitimine bakın .


3
İkinci kod parçası, onu tüm gerçek değerlere ilklendirmek (ayarlamak) istediğimizde yararlıdır. Mükemmel cevap!
despot

3
Değişken adını ters çevirmeyi ve varsayılan başlatmayı yanlış değerlerle kullanmayı tercih ederim.
BalusC

Ben lehine aslında duyuyorum Boolean[] array: Eğer her bir eleman için üç durum var olanak sağladığından true, falseve nullsen "işlenmez" olduğunu bir şeye çekmek istiyorum durumlar için yararlı olduğu.
Abhishek Divekar

20

Dizi ayırdığınızda, dizi yanlış olarak başlatılacaktır.

Java'daki tüm diziler, tür için varsayılan değerle başlatılır. Bu, ints dizilerinin 0 olarak başlatıldığı, boole dizilerinin yanlış olarak başlatıldığı ve referans türlerinin dizilerinin sıfır değerine başlatıldığı anlamına gelir.


12
O kullanıyor Boolean, değil boolean, bu yüzden varsayılan olacak null.
BalusC

1
Doğru. Ben görmedim Arrays.fill hile yapmalı.
Jørgen Fogh

9

Java'daki diziler 0'dan indekslemeye başlar. Yani örneğinizde, dizinin dışında kalan bir öğeye tek tek atıfta bulunuyorsunuz.

Muhtemelen freq [Global.iParameter [2] -1] = false gibi bir şey olmalıdır;

Hepsini başlatmak için dizide döngü yapmanız gerekir, bu satır yalnızca son elemanı başlatır.

Aslında, Java'daki boole'lar için false değerinin varsayılan değer olduğundan oldukça eminim, bu nedenle hiç başlatmanıza gerek kalmayabilir.

Saygılarımla


2
O kullanıyor Boolean, değil boolean, bu yüzden varsayılan olacak null.
BalusC

5

falseVarsayılan olarak başlatılacaklar . Java'da diziler yığın üzerinde oluşturulur ve dizinin her öğesine türüne bağlı olarak varsayılan bir değer verilir. İçin booleanveri varsayılan değerdir yazın false.


3
O kullanıyor Boolean, değil boolean, bu yüzden varsayılan olacak null.
BalusC

boolean kullanmak istemiştim, benim hatam ... yanıltma için özür dilerim
leba-lev

2

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

Global.iParameter [2]:

Sabit değeri olmalı


1
Bu doğru değil. değişkenler de olabilir. sorun, diziye erişmek için Global.iParameter [2] kullanıyor olmanızdır. ancak endeksler 0'dan yalnızca Global.iParameter [2] -1'e kadar gidiyor !!
Karussell
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.