Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
---- Logik (http://www.informatikerboard.de/board/board.php?boardid=16)
----- Mit String rechnen (http://www.informatikerboard.de/board/thread.php?threadid=2330)


Geschrieben von Björn am 04.06.2015 um 19:24:

  Mit String rechnen

Meine Frage:
Hi zusammen,

den ganzen Tag zerbreche ich mir jetzt schon den Kopf über das Thema, wie ich einen String berechnen kann.

Als Beispiel:

code:
1:
 String test = "123+546+345"; 


Wenn ich versuche den kompletten String zu parsen, bekomme ich eine Exception. Dann dachte ich mir, es mal mit substrings zu versuchen, allerdings sehr aufwendig und ziemlich erfolglos.



Meine Ideen:
Habt ihr vielleicht die zündenen Idee für mich?

Vielen Dank :-)



Geschrieben von eulerscheZahl am 04.06.2015 um 19:58:

 

Kommt ganz darauf an, die komplex der string ist. Wenn es nur + Zeichen sind, tut es ein test.split('+'). Das gibt dir ein Array, wo du die Zahlen einzeln parsen kannst.

Wenn es komplizierter wird (Funktionen, verschachtelte Klammerausdrücke, ...) geht das nicht so einfach, da empfehle ich einen Binärbaum, um die Struktur zu erfassen. Ich habe sowas für die Projektarbeit gebraucht, wenn du willst, kann ich den Code hochladen.



Geschrieben von Björn am 04.06.2015 um 20:01:

 

Danke für die schnelle Antwort. Leider sind es die 4 Grundrechenarten wo vorhanden sein müssen. Wäre super, wenn du den Code hochladen könntest :-)



Geschrieben von eulerscheZahl am 04.06.2015 um 20:15:

 

Im Anhang.
Mein Code kann aber einiges mehr, also nicht erschrecken wegen der Länge (>500 Zeilen). Dein Problem kriegt man auch mit weniger gelöst.

Verwendung:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
Parser p = new Parser("123+546+345");
System.out.println(p.calc(new HashMap<String, Double>())); //1014.0

Parser p2 = new Parser("x+3*y");
HashMap<String, Double> input = new HashMap<>();
input.put("x", 2.0);
input.put("y", 3.0);
System.out.println(p2.calc(input)); //11.0

Parser p3 = new Parser("x^3*sin(x)");
System.out.println(p3.derive("x")); //3*x^2*sin(x)+x^3*cos(x)



Geschrieben von Björn am 04.06.2015 um 20:29:

 

Vielen Dank :-)


Forensoftware: Burning Board, entwickelt von WoltLab GmbH