2017-04-13 319 views
2

我想用JavaFx對以下應用程序進行編程:存儲和使用算術運算符

該程序生成用戶必須解決的數學任務。用複選框可以決定哪些運算符(+ - * /)將會出現。如果全部4個選項都被選中,每個操作員都應該使用一次。所以輸出將是這樣的:

4 + 3-2 * 1/

我的問題是,我不知道我怎麼能存儲選擇的運營商,以及如何我可以在以後將它們插入該程序作爲工作操作員而不是字符或字符串,因爲最後程序必須將用戶解決方案與計算機計算出的解決方案進行比較。

謝謝你的幫助和建議我真的希望有人能幫助我。

+1

您需要創建某種對象模型來表示(並評估)表達式;這可能包括一個帶有特定子類的抽象'Operator'類(或者可能是一個帶'evaluate(double,double)'方法的'Operator'類或類似的類)。然後你會生成表達式對象,這將能夠評估自己。你的問題實在太廣泛了:至少,完整的答案會有幾頁長。 –

回答

0

定義一個enum,如

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; 
    } 
} 

您可以使用驗證通過檢查ArithmeticOperator.values()

+0

謝謝你的回答。你能解釋一下你的書面代碼嗎?我不明白這一點,因爲我從來沒有使用過枚舉和BiFunction。 – wenzel267

+0

BiFunction接口是在Java 8中引入的 - 它有1個方法需要兩個參數並返回一些內容。這個奇怪的看起來像' - >'的語法是(Java 8)lambda。枚舉一直存在,並且是具有確切實例數的類。谷歌這些條款;在評論中掩蓋太多了。 – Bohemian

0

所有你需要做的就是有一些if語句,你必須產生一些數字。 程序遍歷它並檢查運算符,如果有多個運算符,則檢查運算順序(除以乘,然後減和相加)。然後程序檢查輸入。