Hallo Java Forum,
ich versuche gerade einen Taschenrechner zu programmieren. Die eigentlichen Rechner Klassen habe ich schon ausprogrammiert.
Es gibt dabei 2 unterschiedliche Arten von Rechnungen.
1) Rechnungen mit 2 Parametern: z.B. Addition, Subtraktion, Exponent ...
2) Rechnungen mit 1 Parameter: z.B. Negation, Sinus, Klammern, Wurzel ...
Das funktioniert auch alles wie es soll.
Jetzt möchte ich aber einen Parser programmieren, der einen String in die einzelnen Abschnitte zerlegt und dann die Rechnerklassen benutzt.
Dabei würde ich gerne die Prioritäten der einzelnen Rechnungsarten konfigurierbar halten.
Dafür habe ich eine Methode geschrieben, die ich rekursiv aufrufe, um die Baumstruktur zu erstellen.
Für einfache Rechnungen, die nur 2-Parameter Rechnungen enthalten funktioniert das schon gut.
Hilfe brauch ich aber bei Klammern und Rechnungen mit einem Parameter.
Wie würdet ihr dabei vorgehen?
Schon mal vielen Dank,
Jeva
ich versuche gerade einen Taschenrechner zu programmieren. Die eigentlichen Rechner Klassen habe ich schon ausprogrammiert.
Es gibt dabei 2 unterschiedliche Arten von Rechnungen.
1) Rechnungen mit 2 Parametern: z.B. Addition, Subtraktion, Exponent ...
2) Rechnungen mit 1 Parameter: z.B. Negation, Sinus, Klammern, Wurzel ...
Das funktioniert auch alles wie es soll.
Jetzt möchte ich aber einen Parser programmieren, der einen String in die einzelnen Abschnitte zerlegt und dann die Rechnerklassen benutzt.
Dabei würde ich gerne die Prioritäten der einzelnen Rechnungsarten konfigurierbar halten.
Dafür habe ich eine Methode geschrieben, die ich rekursiv aufrufe, um die Baumstruktur zu erstellen.
Für einfache Rechnungen, die nur 2-Parameter Rechnungen enthalten funktioniert das schon gut.
Hilfe brauch ich aber bei Klammern und Rechnungen mit einem Parameter.
Java:
public RechenObj render(String formel) {
if(enthältKlammern()){ //Klamern oder 1-Parameter Rechnungen
//Klammern
}else if(enthältOperator()){
//Operator
String operator = this.operatorMitKleinsterPriorität();
OperatorObj operatorObj = getOperatorObj(operator);
String[] split = formel.split("\\"+operator, 2);
return operatorObj(render(split[0]), render(split[1]));
}else if(istEineZahle()){
//Zahle
return formel;
}else{
System.out.println("Ungültige Formel.");
}
return null;
}
Wie würdet ihr dabei vorgehen?
Schon mal vielen Dank,
Jeva
Zuletzt bearbeitet: