用JAVA简化这个if语句

用JAVA简化这个if语句,java,if-statement,for-loop,expression,Java,If Statement,For Loop,Expression,我试图简化这个if语句,以避免代码重复和if语句。我还希望能够传递2个以上的参数。i、 e.5+10*2/2。有什么想法吗 公共静态双随机表达式草稿(字符串exp){ 双素数结果=0; 双newResult=0; 对于(int i=0;i

我试图简化这个if语句,以避免代码重复和if语句。我还希望能够传递2个以上的参数。i、 e.5+10*2/2。有什么想法吗

公共静态双随机表达式草稿(字符串exp){
双素数结果=0;
双newResult=0;
对于(int i=0;i
您的循环应该得到操作
*/-+

Integer.parseInt(exp.substring(0,i))
移动到一个函数,例如getLeftArg

Integer.parseInt(exp.substring(i+1,exp.length())执行相同的操作例如getRightArg

然后使用参数leftArg、rightArg和operation创建新方法

因为代码的其余部分是相同的

i、 e

newResult= newMethod (leftArg, rightArg, operation)

您的计算加上
primeResult=newResult;系统输出打印项次(primeResult)

因为Java没有委托之类的东西,所以除非在对象中定义每个操作符,否则您将无法像希望的那样实现为循环。如果您想要最简单的代码,以下是Mauricio的解决方案:


是的,让JavaScript引擎计算算术表达式有点过分了。然而,它显然可以处理多个操作符,所以您不必自己解析它

对于这类问题,我认为最优雅的方法是使用多态性和枚举类型,而不是switch语句。

下面的代码来自有效的Java——第6章,Joshua Bloch

public enum Operation {
    PLUS("+") {
        double apply(double x, double y) { return x + y; }
    },
    MINUS("-") {
        double apply(double x, double y) { return x - y; }
    };
    private final String symbol;
    Operation(String symbol) { this.symbol = symbol; }
    @Override public String toString() { return symbol; }

    abstract double apply(double x, double y);

    private static final Map<String, Operation> stringToEnum = new HashMap<>();
    static {
        for(Operation op : values())
            stringToEnum.put(op.toString(), op);
    }
    public static Operation fromString(String symbol) {
        return stringToEnum.get(symbol);
    }
}

一个更好的方法是使用switch,不中断,默认情况下使用两个语句,即primeResult=newResult;和System.out.println(primeResult);由于您没有考虑*,/first,因此您的代码也不会计算出正确的答案。请勿重新发布相同的问题,因为您不喜欢这些答案。编辑原始问题。
public enum Operation {
    PLUS("+") {
        double apply(double x, double y) { return x + y; }
    },
    MINUS("-") {
        double apply(double x, double y) { return x - y; }
    };
    private final String symbol;
    Operation(String symbol) { this.symbol = symbol; }
    @Override public String toString() { return symbol; }

    abstract double apply(double x, double y);

    private static final Map<String, Operation> stringToEnum = new HashMap<>();
    static {
        for(Operation op : values())
            stringToEnum.put(op.toString(), op);
    }
    public static Operation fromString(String symbol) {
        return stringToEnum.get(symbol);
    }
}
 double result = Operation.fromString("+").apply(1, 1); // 2.0
 result = Operation.fromString("-").apply(1,1); // 0.0