Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[JAVA] String vertalen naar een Boolean

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedemiddag / avond,

Ik ben bezig met een opdracht waarin ik de volgende output in een String heb zitten. De inhoud van een string is gemaakt door een boomstructuur te doorlopen waar nodes verschillende waarden hebben. Er volgt dan uiteindelijk een string uit zoals onder. (die in dit geval true is)

Java:
1
2
3
4
5
6
7
8
9
10
11
//de String waar het om draait
String solution = "((( true ) && ( true )) && ( true ))"

//wat ik er mee wil doen
if ((this.solution)) {
    retvalue = true;
    
}
else if (!this.solution) {
    retvalue = false;
}


Het probleem is nu dat ik deze string niet in een if-statement kan gebruiken omdat het geen boolean waarde is. Kan ik dit op een of andere manier wel zo krijgen? Als ik bijvoorbeeld handmatig de code inklop, dan werkt het wel.

Java:
1
2
3
4
        if (((( true ) && ( true )) && ( true )))
        {
            System.out.println("yay");
        }


Wat ik dus uiteindelijk wil is de inhoud van de string in de if-statement zetten.

  • ari3
  • Registratie: Augustus 2002
  • Niet online
Boolean.parseBoolean(String) is wat je zoekt.

[ Voor 20% gewijzigd door ari3 op 10-02-2008 17:57 ]

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


Verwijderd

Topicstarter
Zoiets had ik ook in gedachten (had dat nog niet geprobeerd) maar dan klopt de waarde nog steeds niet.

Java:
1
2
3
        String s = "( true )";
        boolean b = Boolean.parseBoolean(s);
        System.out.println(b);


De output geeft gewoon false aan

Ik had het zelf ook eerst geprobeerd met valueOf, maar dat gaat enkel als er echt 'true' in de string staat en verder niks.

[ Voor 19% gewijzigd door Verwijderd op 10-02-2008 18:29 ]


Verwijderd

Boolean.parseBoolean zal echt geen expressions parsen en evalueren. Hiervoor zul je een iets geavanceerdere parser moeten gebruiken.

Verwijderd

Verwijderd schreef op zondag 10 februari 2008 @ 17:52:
Ik ben bezig met een opdracht waarin ik de volgende output in een String heb zitten. De inhoud van een string is gemaakt door een boomstructuur te doorlopen waar nodes verschillende waarden hebben.
Als je al een boomstructuur hebt waar je doorheenloopt, waarom bouw je die string dan op? Heb je die string echt nodig? Het lijkt me namelijk veel makkelijker om tijdens het doorlopen van de boom het antwoord te verkrijgen dan er eerst een string van te bouwen en die vervolgens te parsen (door weer een nieuwe boom te bouwen ;) )

  • Sv3n
  • Registratie: Mei 2002
  • Laatst online: 20-11 14:31
Gaat het altijd om AND ? in dat geval zou je ook deze smerige oplossing kunnen gebruiken:

Java:
1
2
3
4
5
6
7
8
if (solution.indexOf("false") > -1)
{ 
   solution = false;
}
else
{
   solution = true;
}

Last.fm
Films!


Verwijderd

Topicstarter
Verwijderd schreef op zondag 10 februari 2008 @ 18:33:
Boolean.parseBoolean zal echt geen expressions parsen en evalueren. Hiervoor zul je een iets geavanceerdere parser moeten gebruiken.
Dan zal ik daar toch naar moeten kijken. Zat al te denken aan een methode te schrijven die dan de String naar een boolean vertaald. Ik heb enkel nog nooit iets met parsen gedaan (behalve dan eens parseInt) dus dat wordt nog ff uitzoeken.
Verwijderd schreef op zondag 10 februari 2008 @ 18:40:
[...]

Als je al een boomstructuur hebt waar je doorheenloopt, waarom bouw je die string dan op? Heb je die string echt nodig? Het lijkt me namelijk veel makkelijker om tijdens het doorlopen van de boom het antwoord te verkrijgen dan er eerst een string van te bouwen en die vervolgens te parsen (door weer een nieuwe boom te bouwen ;) )
Die string heb ik opzich wel nodig. Het is namelijk onderdeel van een fitnessberekening van een genetic algorithm. Het zal uiteindelijk een optimale oplossing moeten voorstellen.
Sv3n schreef op zondag 10 februari 2008 @ 19:45:
Gaat het altijd om AND ? in dat geval zou je ook deze smerige oplossing kunnen gebruiken:

Java:
1
2
3
4
5
6
7
8
if (solution.indexOf("false") > -1)
{ 
   solution = false;
}
else
{
   solution = true;
}
Jammer genoeg niet. Aangezien het om een GA gaat is de lengte verschillend en wordt er afgewisseld met AND en OR.

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 22:07

Macros

I'm watching...

Je zit helemaal fout te denken. Die string is gewoon een output mogelijkheid van de GA en die is om uitgelezen te worden door mensen, niet door computers. De boom is zeker ook te verkrijgen als een echte boom, die nog niet is omgezet naar een string. Die echte boom kan je dan zeer makkelijk om kunnen zetten naar de echte waarde. Maar dan moet je denk ik even kijken hoe je dat moet doen, kijk eens in de documenten die bij de GA horen, of vraag aan de mensen die het GA hebben geprogrammeerd.

"Beauty is the ultimate defence against complexity." David Gelernter


Verwijderd

Topicstarter
Wat ik uiteindelijk wilde is niet gelukt, maar ik heb de volgende oplossing gebruikt. Er is een nieuwe methode gemaakt waarmee de string helemaal wordt ontleed door deze stuk voor stuk op te lossen. De haakjes staan altijd goed en daar kan dus op gezocht worden. Hierdoor kan dan ook de string helemaal opgelost worden.

Misschien niet de snelste manier, maar zolang het werkt ben ik al blij :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 22:59

Janoz

Moderator Devschuur®

!litemod

Mooie boel. Je begint met een boom. Zet deze om naar een string om hem vervolgens voor het evalueren weer in een boomachtige structuur op te slaan..

* Janoz is met Macros en YeXo.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:06

BCC

Met hierboven eens. Maar de simpelste hack is checken if het woordje "false" ergens in de string voorkomt :). Andere ranzige oplossing is eval, maar als iemand bij ons op het werk eval gebruikt moet hij taart halen...

[ Voor 33% gewijzigd door BCC op 14-02-2008 19:50 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

eval in Java?

  • PietjePuk007
  • Registratie: Maart 2007
  • Laatst online: 12-11 16:39
BCC schreef op donderdag 14 februari 2008 @ 19:49:
Met hierboven eens. Maar de simpelste hack is checken if het woordje "false" ergens in de string voorkomt :).
Dat kan niet, want als je:
(true and (false or true))
hebt is 't antwoord true. Ik ben de medestudent van TS :P.

  • writser
  • Registratie: Mei 2000
  • Laatst online: 22:47
Je moet je eigen parser schrijven. Schrijf eerst je grammatica uit (bijv. in BNF vorm) en implementeer stap voor stap een parser die alle mogelijkheden uittest.

Onvoorstelbaar!


  • Amras
  • Registratie: Januari 2003
  • Laatst online: 01-10 12:59
writser schreef op maandag 18 februari 2008 @ 17:04:
Je moet je eigen parser schrijven. Schrijf eerst je grammatica uit (bijv. in BNF vorm) en implementeer stap voor stap een parser die alle mogelijkheden uittest.
Aangezien een boomstructuur al aanwezig is, lijkt me dat een beetje dubbelop (boom -> platte string -> boom). Het lijkt me beter om te onderzoeken hoe je de evaluatie op de bestaande boom kunt uitvoeren. Kijk hoe die string wordt opgebouwd door de boom en probeer nu te bedenken hoe je dit voor booleans kunt toepassen. Wanneer evalueert de boom tot true? Wanneer evalueert een node in de boom tot true?

Een aantal voorzetjes waar je wat mee moet kunnen. Als je later nog implementatie-specifieke problemen tegenkomt, kun je die hier weer plaatsen. :)

  • PietjePuk007
  • Registratie: Maart 2007
  • Laatst online: 12-11 16:39
Zoals eerder aangegeven is 't inmiddels opgelost door middel van het oplossen van sub-vergelijkingen, er is te weinig tijd om mooie oplossing te bedenken.

Als iemand de code wil zien dan kan dat ook nog :P.
Pagina: 1