用JAVA简化这个if语句
我试图简化这个if语句,以避免代码重复和if语句。我还希望能够传递2个以上的参数。i、 e.5+10*2/2。有什么想法吗用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
公共静态双随机表达式草稿(字符串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