• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Java: Zeichenetikette ausrechnen

keman

Gast
Weiss jemand wie ich z.B. den String "2+2" in einem Int konvertieren kann, so dass der Integer die Lösung der Rechnung ist, also 4? Gibt es hier irgendwelche Bibliotheken? Oder weiss jemand, wie man das ganze manuell machen kann?
 

Ollo

Golden Delicious
Registriert
25.07.04
Beiträge
6
Hallo,

Code:
int i = Integer.parseInt("2");

könnte dir weiterhelfen.

Aber du müsstest meines wissens den string zerlegen.
So, dass du dann
Code:
int ergebnis = i1 + i2;
hast.

Mfg
Ollo

PS : Java ist auch nur eine Insel könnte dir weiterhelfen.
 

FloydThreepwood

Stechapfel
Registriert
19.01.06
Beiträge
161
NAtürlich klappt das nicht, ein String ist eine Zeichenkette und kein Taschenrechner.

Mein Vorschlag (grobes algorithmisches Vorgehen):
Zerlege in einzelzeichen, dann trenne zwischen Operator (+) und Zahl, addiere Zahlen.

Zu lösen blieben noch:
1. Was mit mehrstelligen Zahlen (wenn man von rechts liest kaum ein Problem)?
2. Andere Operatoren unterstützen (am einfachsten rekursiv)?

Ich hoffe es ist ein wenig klarer geworden, ist auf jeden Fall ne schöne Aufgabe. Ich Programmier gerade selber an einer Art Taschenrechner, allerdings basierend auf Formalen Gramatiken (Gleichungslogik) und daher mit sehr vielen Variablen. Am einfachsten wird das ganze im Übrigen indem man seinen eingabetyp ändert und sich mal mit binären Bäumen auseinandersetzt.

cu ft
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
FloydThreepwood schrieb:
Ich Programmier gerade selber an einer Art Taschenrechner, allerdings basierend auf Formalen Gramatiken (Gleichungslogik) und daher mit sehr vielen Variablen.

Das ist eine sehr spassige Sache. Hab auch mal was in der Art machen dürfen... hat tierisch Spass gemacht .... wurde dann allerdings nicht benutzt :(
 

FloydThreepwood

Stechapfel
Registriert
19.01.06
Beiträge
161
LoCal schrieb:
Das ist eine sehr spassige Sache. Hab auch mal was in der Art machen dürfen... hat tierisch Spass gemacht .... wurde dann allerdings nicht benutzt :(

Ich hab schon Leute, die es kaufen wollen. Befinde mich gerade mitten im Konzeptdesign. Klar ist mir das ganze Zwar schon mit Formeln und Funktionen, schwerer wird allerdings Matrizen und Vektoren in diese Logik einzufügen, zumal ich Angst vor den unendlichen Universen im Endscheidungsraum habe. Da ich mich auf ein formales TES stütze, muss ich irgendwie Eingaben endlichen zu einer Lösung führen... Spaß macht es, aber auch Angst. Es gibt doch auch keinen praktikablen Test auf Noethersch, oder?

cu ft
 

keman

Gast
Klar kann ich dies hier machen:

String rechnung = "2+2";
String zerlegt = rechnung.split("+");


Aber wenn ich eine solche Rechnung habe:

String rechnung = "2+4-3";

geht das nicht...
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Klar nicht, Du musst die Zeichenkette untersuchen und dann nach den mathematischen Regeln abarbeiten...
 

keman

Gast
Eben, wie kann ich das machen? Genau deswegen frage ich ja...
 

MatzeLoCal

Rheinischer Bohnapfel
Registriert
05.01.04
Beiträge
2.422
Naja.. du gehst nach den rechenregeln vor:

- Klammern auflösen usw.
- Punkt vor Strich
- usw

Mach es einfach so, wie du es auf einem Blatt Papier auch machen würdest.

- Suche die erste öffnende Klammer
- Klammer gefunden, dann such die die schliessenden (darauf achten, dass die nächste schliessende nicht unbedingt die richtige ist!)
- Wenn du dann einen klammerfreien Term hast, suche nach '*' und/oder '/' und führe die entsprechende operationen durch...
- Das gleiche für + und -
- Die ganzen Ergebnisse verwaltest Du in temporären Variablen ...
- irgendwann hast du das dann soweit vereinfacht, dass z.b. du nur noch

tmpErgebnis1 + tmpErgebnis2
(das ist natürlich nur pseudocode)

hast..

du solltest ich an den Umgang mit indexOf() gewöhnen :)