# Java - Klammerpaare matchen



## NoNamExTc (13. Mai 2011)

Hallo,

ich habe ein Aufgabe die ich leider nicht gelöst bekomme.

Ich sollte in der Schule die Logische Verknüpfungen in Java programmieren. Das war auch kein Problem jetzt sollen wir uns aber eine Möglichkeit ausdenken wie wir mit einem von einem User eingegebenen String den mit den Logische Verknüpfungen verarbeiten lassen. Ich habe mir gedacht das der User etwas nach dem Muster AND(true,true,false)  eingeben soll und das Programm dann false zurückgibt.

Das habe ich auch hinbekommen... Aber jetzt das Problem, wenn jetzt der User AND(true,true,OR(true,false)) eingibt weiß ich nicht wie ich zuerst das OR und dann das AND bearbeiten kann.

Ein bekannter hat gemeint das würde man Klammerpaare matchen nennen aber darunter habe ich  nichts gefunden.
Wenn mir dabei jemand helfen könnte wäre das echt SUPER =)

ps. Achso, das ist nicht mehr bestandteil der Hausaufgaben. Ich will es nur können da ich mich gerene mit sowas beschäftige 

LG


----------



## Gast2 (13. Mai 2011)

Solche Ausdrücke kann man ganz gut als Baum aufspannen:


```
AND
        /      |     \
    true     true    OR
                     /  \
                  true false
```

Und dann kannst du im Baum navigieren.


----------



## NoNamExTc (13. Mai 2011)

Das sieht ja gut aus 
Aber leider wüsste ich auch nicht wie ich das so in Java umsetzen kann.

Bzw. mit welchen Funktionen mache ich das. Ich hatte es mit split, matchern, replace und so versucht bin aber nicht wirklich zu einem sinnvollen effekt gekommen :-(


----------



## Antoras (13. Mai 2011)

http://www.java-forum.org/allgemeines/12306-parser-fuer-mathematische-formeln.html

Vllt. hilft dir das ja schon weiter, wenn nicht gibt's natürlich auch noch anderer Möglichkeiten das zu lösen. Einfach nochmal melden.


----------



## NoNamExTc (15. Mai 2011)

Uff das ist ja schon recht kompliziert und viel xD

Da muss ich mich ersteinmal durchlesen 

Aber danke


----------



## Landei (15. Mai 2011)

Wenn du AND(true,true,OR(true,false))  hast und auf das erste ( stößt, setzt du einen Zähler auf 1. Dann gehst du den String durch und zählst für jede ( eins hoch und für ) eins runter. Wenn du bei 0 bist, hast du die passende schließende Klammer gefunden. Dann wertest du alles zwischen den Klammern aus, und führst am Ende das AND auf den Ergebnissen aus.


----------



## freak_007 (15. Mai 2011)

Mit Regex(java.util.regex) kannst du es auch lösen. Du müsstest dich ein wenig rumspielen. RegExr


----------

