gpt4 book ai didi

java - 如何消除 switch case 或 if-else ?并执行以下操作?

转载 作者:行者123 更新时间:2023-12-01 19:33:46 26 4
gpt4 key购买 nike

下面是代码:

public String evaluate() {

if (this.data.equals("+")) {
return String.valueOf(Double.parseDouble(this.children.get(0).evaluate()) + Double.parseDouble(this.children.get(1).evaluate()));
}

else if (this.data.equals("-")) {
return String.valueOf(Double.parseDouble(this.children.get(0).evaluate()) - Double.parseDouble(this.children.get(1).evaluate()));
}

else if (this.data.equals("*")) {
return String.valueOf(Double.parseDouble(this.children.get(0).evaluate()) * Double.parseDouble(this.children.get(1).evaluate()));
}

else {
return String.valueOf(Double.parseDouble(this.children.get(0).evaluate()) / Double.parseDouble(this.children.get(1).evaluate()));
}

}

this.data 值保存的是字符串形式的操作数。有没有办法完全消除 if-else,减少代码行数?也不要使用开关盒。

java中有没有办法将字符串转换为操作数?

最佳答案

有一种非常优雅的方法可以通过使用枚举来实现此行为。由于 java 枚举不仅仅是枚举(就像其他编程语言一样),而是完整的类,您可以编写此枚举(“+”和“*”的简单示例):

public enum Operation {
PLUS("+") {
@Override
public int apply(int value1, int value2) {
return value1 + value2;
}
},
MULTIPLY("*") {
@Override
public int apply(int value1, int value2) {
return value1 * value2;
}
};

private final String symbol;

private static final Map<String, Operation> STRING_TO_ENUM = Arrays.stream(Operation.values()).collect(Collectors.toMap(Operation::toString, e -> e));

private Operation(String symbol) {
this.symbol = symbol;
}

public static Operation fromString(String symbol) {
return STRING_TO_ENUM.get(symbol);
}

@Override
public String toString() {
return symbol;
}

public abstract int apply(int value1, int value2);
}

并将评估减少为:

public evaluate() {
return Operation.fromString(this.data).apply(value1, value2);
}

关于java - 如何消除 switch case 或 if-else ?并执行以下操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58572721/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com