2017-04-13 154 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语句,你必须产生一些数字。 程序遍历它并检查运算符,如果有多个运算符,则检查运算顺序(除以乘,然后减和相加)。然后程序检查输入。