Podivné chování rozebrat boolean v javě

0

Otázka

Jsem rozvojové můj první libGDX hru, je nějaký Nečinný hra s desktop simulátor. Ale moje otázka je o Java obecně.

V této hře bych chtěl spravovat GameEvents data z CSV souboru při prvním spuštění, a později to by mělo být uloženo na Gdx.App.Preference jako Řetězec, který funguje dobře.

Ale to, co nefunguje, jak se očekávalo, je to, co se zdá být nejjednodušší věc, CSV parse metoda, není nic příliš komplikované, já jsem jen dělal smyčce pro každý CSV pole a ukládat jej v GameEvent. Třídy (všechny primitivní datové typy int, string a float) a vlastně to funguje... ale to říká, že některé booleovské hodnoty jsou false když to tak ve skutečnosti nebylo.

Tohle je můj parse metoda:

 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++;
    }
}

Ladit to, že jsem součástí pár println(), první tisky "dat" raw, protože vstupuje s 2 GameEvents hodnoty:

1970MM01;ČEKÁ;titlelonglonglong//titulků//Mom//toto je maintext//je lepší, když jste mohli oddělit to v//různé linky;MAIL//SCHR;1970MM02;NULL;MAIL;MAIL;true;true;true;1970;1;0.5;0.5;1;1;0;pravda;60 1970MM02;ČEKÁ; childtitlewith velmi, velmi, velmi, velmi dlouhý název//titulků//bla blah//booooh;MANAGER//MANAGERb//MANAGERc;NULL;NULL;MAIL;MAIL;false;true;false;1970;0;0.5;0.5;1;1;0;true;30

A to ostatní je po parsování je v GameEvent.class jen analyzován bez absolvování jakékoli jiné metody...

1970MM01;ČEKÁ;titlelonglonglong//titulků//Mom//toto je maintext//je lepší, když jste mohli oddělit to v//různé linky;MAIL//SCHR;1970MM02;NULL;MAIL;MAIL;false;false;false;1970;1.0;0.5;0.5;1.0;1.0;0.0;pravda;60

Prošel jsem dokumentaci o Boolean.valueOf() a Boolean.getBoolean... ale jak dát nějaké náhodné-hledá hodnoty v některých oblastech, ale funguje dobře, v jiných...

Co dělám špatně?

P. S: vím, že můžu udělat nějaké řešení s "pokud" prohlášení, a mění true/false podle 0/1, nebo pomocí Json, ale potřebuju vědět, co jsem nepochopil v něco tak jednoduché jako csv parser T. T

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

Nejlepší odpověď

3

Používáte špatnou metodu.

Použití parseBoolean(field)ne getBoolean(field).


Podle dokumentace pro getBoolean()

Vrátí true tehdy a jen tehdy, pokud systém vlastnost pojmenovaný argument existuje a je rovna, ignorování případě, řetězec "true". Systém vlastnost je přístupná prostřednictvím getPropertymetoda definována System třídy.

takže pokud je systém vlastnost s názvem "true", jehož hodnota je "True"tato vrátí false.

Nicméně, dokumentace pro parseBoolean() říká:

Analyzuje řetězec jako argument boolean. Boolean se vrátil představuje hodnotu true pokud řetězec argument je null a rovná, ignorování případě, řetězec "true". Jinak, false hodnota je vrácena, včetně pro nulový argument.

což je to, co chcete.

2021-11-21 04:53:36

"takže pokud je systém vlastnost s názvem "pravda", jehož hodnotou je "True", bude return false." Aw, díky! myslel jsem, že by to mělo být něco tak jednoduché. Teď to funguje perfektně!
VladScv

V jiných jazycích

Tato stránka je v jiných jazycích

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