2017-04-13 3 views
2

Ich möchte die folgende Anwendung mit JavaFx programmieren:Speichern und Verwenden von arithmetischen Operatoren

Das Programm generiert mathematische Aufgaben, die der Benutzer lösen muss. Mit Kontrollkästchen können Sie entscheiden, welche Operatoren (+ - * /) auftreten. Wenn alle 4 Optionen aktiviert sind, sollte jeder Operator einmal verwendet werden. So wird der Ausgang so etwas wie dieses:

4 + 3-2 * 1/2

Mein Problem ist, dass ich keine Ahnung, wie ich die ausgewählten Betreiber speichern kann und wie kann ich sie einsetzen später in das Programm als Arbeitsoperator und nicht als Char oder String, da das Programm am Ende die Benutzerlösung mit der berechneten Lösung vom Computer vergleichen muss.

Vielen Dank für Ihre Hilfe und Vorschläge Ich hoffe wirklich, dass mir jemand dabei helfen kann.

+1

Sie müssen eine Art Objektmodell erstellen, um den Ausdruck darzustellen (und auszuwerten). Dies würde wahrscheinlich eine abstrakte "Operator" -Klasse mit bestimmten Unterklassen (oder vielleicht eine "Operator" -Enum mit einer "evaluate (double, double)" - Methode oder Ähnliches beinhalten. Dann würden Sie das Ausdrucksobjekt erzeugen, das sich selbst auswerten könnte. Deine Frage ist wirklich zu weit gefasst: Eine vollständige Antwort wäre mindestens mehrere Seiten lang. –

Antwort

0

definieren ein enum, zB

public enum ArithmeticOperator implements BiFunction<Double, Double, Double> { 
    PLUS("+", (a, b) -> a + b), 
    MINUS("-", (a, b) -> a - b), 
    MULTIPLY("*", (a, b) -> a * b), 
    DIVIDE("/", (a, b) -> a/b); 

    private final String symbol; 
    private final BiFunction<Double, Double, Double> operation; 

    ArithmeticOperator(String symbol, BiFunction<Double, Double, Double> operation) { 
     this.symbol = symbol; 
     this.operation = operation; 
    } 

    public Double apply (Double a, Double b) { 
     return operation.apply(a, b); 
    } 

    public String toString() { 
     return symbol; 
    } 
} 

Sie können durch die Untersuchung ArithmeticOperator.values() Verwendung überprüfen.

+0

Vielen Dank für Ihre Antwort. Können Sie Ihren geschriebenen Code etwas erklären? Ich verstehe es nicht, da ich vorher noch nie mit enum und BiFunction gearbeitet habe. – wenzel267

+0

Die BiFunction-Schnittstelle wurde in Java 8 eingeführt - sie hat eine Methode, die zwei Argumente akzeptiert und etwas zurückgibt. Diese seltsam aussehende Syntax um '->' ist ein (Java 8) Lambda. Enums gibt es schon immer und sind Klassen mit einer genauen Anzahl von Instanzen. Google diese Begriffe; es ist zu viel, um es in einem Kommentar zu beschreiben. – Bohemian

0

Alles, was Sie tun müssen, ist einige if-Anweisungen haben, und Sie müssen einige Zahlen generieren. Das Programm durchläuft es und überprüft die Operatoren und wenn es mehr als einen Operator gibt, überprüft die Reihenfolge der Operation (multiplizieren, dann subtrahieren und addieren). Dann prüft das Programm die Eingabe.

Verwandte Themen