Java'da booleanları ayrıştırma garip davranışı

0

Soru

İlk libGDX oyunumu geliştiriyorum, masaüstü simülatörü ile bir tür Boşta oyun. Ama benim sorum genel olarak Java ile ilgili.

Bu oyunda GameEvents verilerini ilk çalıştırmada bir CSV dosyasından yönetmek istiyorum ve daha sonra Gdx'e kaydedilecekti.Uygulama.Bir Dize olarak tercihler, bu iyi çalışıyor.

Ancak beklendiği gibi çalışmayan şey, en kolay şey gibi görünen şey, CSV ayrıştırma yöntemi, çok karmaşık bir şey değil, yalnızca her CSV alanı için bir döngü yapıyorum ve bir oyun etkinliğinde saklıyorum. Sınıf (tüm ilkel veri türleri, int, string ve float) ve aslında çalışır... ama bazı Booleanların aslında olmadıklarında yanlış olduğunu söylüyor.

Bu benim ayrıştırma yöntemim:

 private void parseEventData(String data) {

    String[] text = data.split(";");
    int i=0;
    for(String field : text) {
        switch(i){
            case 0:
                this.id=field;
                break;
            case 1:
                this.eventState=field;
                break;
            case 2:
              [...]
            case 8:
                this.mainEvent= (Boolean.getBoolean(field));
                break;
            case 9:
                this.active= (Boolean.getBoolean(field));
                break;
            case 10:
                this.continueEvent= (Boolean.getBoolean(field));
                break;
             [...]
            }
        i++;
    }
}

Hata ayıklamak için bir çift println () ekledim, ilki 2 GameEvents değeriyle girerken" data " raw yazdırıyor:

1970MM01; BEKLEMEDE; titlelonglonglong/ / altyazı / / Anne / / bu ana metindir / / çeşitli satırlarda ayırabilirseniz daha iyidir; MAİL/ / MAİLB; 1970MM02; NULL; MAİL; MAİL; true; true; true;1970;1;0.5;0.5;1;1;0;doğru; 60 1970MM02; BEKLEMEDE; childtitleçok çok çok çok uzun bir başlık//altyazı / / falan filan blah//booooh;MANAGER//MANAGERb//MANAGERc;NULL;NULL;MAIL;MAIL;false;true;false;1970;0;0.5;0.5;1;1;0;true;30

Ve bu diğeri Gameevent'te ayrıştırdıktan sonra.sınıf, başka bir yönteme geçmeden ayrıştırıldı...

1970MM01; BEKLEMEDE; titlelonglonglong/ / altyazı / / Anne / / bu ana metindir / / çeşitli satırlarda ayırabilirseniz daha iyidir; MAİL/ / MAİLB; 1970MM02; NULL; MAİL; MAİL; false; false; false;1970;1.0;0.5;0.5;1.0;1.0;0.0;doğru; 60

Boole ile ilgili belgeleri kontrol ettim.valueOf() ve Boolean.Boolean olsun... ancak her ikisi de bazı alanlarda rastgele görünen bazı değerler verir, ancak diğerlerinde iyi çalışır...

Neyi yanlış yapıyorum?

PS: "İf" ifadeleriyle ve true/false değerini 0/1 değiştirerek veya Json kullanarak bazı geçici çözümler yapabileceğimi biliyorum, ancak csv ayrıştırıcısı kadar kolay bir şeyde neyi yanlış anladığımı bilmem gerekiyor. T

boolean csv java libgdx
2021-11-21 04:27:22
1

En iyi cevabı

3

Yanlış yöntemi kullanıyorsun.

Kullanmak parseBoolean(field), değil getBoolean(field).


İçin belgelere göre getBoolean()

Dönüşler true yalnızca bağımsız değişken tarafından adlandırılmış sistem özelliği varsa ve büyük / küçük harf yoksayıldığında dizeye eşitse "true". Bir sistem özelliğine şu adresten erişilebilir getProperty, tarafından tanımlanan bir yöntem System sınıf.

yani adında bir sistem özelliği yoksa "true" değer olan "True" bu yanlış dönecektir.

Ancak, belgeler için parseBoolean() diyor:

String argümanını bir boolean. Döndürülen boole değeri temsil eder true dize bağımsız değişkeni null değilse ve büyük / küçük harf yoksayılarak dizeye eşitse "true". Aksi takdirde, bir false null bağımsız değişkeni de dahil olmak üzere değer döndürülür.

istediğin de bu zaten.

2021-11-21 04:53:36

"yani değeri "Doğru" olan "doğru" adlı bir sistem özelliği yoksa, bu false değerini döndürür."Ah, teşekkürler! bu kadar basit bir şey olması gerektiğini düşündüm. Şimdi mükemmel çalışıyor!
VladScv

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................