我正在尝试无条件地为+ - * /
编写计算器。运算符存储为字符串。
无论如何要实现它吗?
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
////String Operator = "";
String L1="";
String L2="";
String op = "+";
double a = 3;
double b = 2;
//Operator p = p.
Operator p;
b = Operator.count(a, op, b);
System.out.println(b);
}
public enum Operator {
PLUS("+"), MINUS("-"), DIVIDE("/"), MULTIPLY("*");
private final String operator;
public static double count(double a,String op,double b) {
double RetVal =0;
switch (Operator.valueOf(op)) {
case PLUS:
RetVal= a + b;
case MINUS:
RetVal= a - b;
case DIVIDE:
RetVal= a / b;
case MULTIPLY:
RetVal= a * b;
}
return RetVal;
}
Operator(String operator) {
this.operator = operator;
}
// uniwersalna stała grawitacyjna (m3 kg-1 s-2)
}
}
出现此错误:
线程“main”中的异常java.lang.IllegalArgumentException:No enum const class Main $ Operator。+
任何线索?
答案 0 :(得分:11)
您可以使用策略模式并为每个运营商存储计算策略。
interface Calculation {
double calculate(double op1, double op2);
}
class AddCalculation implements Calculation {
double calculate(double op1, double op2) {
return op1 + op2;
}
}
//others as well
Map<String, Calculation> m = ...;
m.put("+", new AddCalculation());
在执行期间,您将从地图中获取计算对象并执行calculate()
。
答案 1 :(得分:1)
我认为使用枚举将是一个不错的选择:
Enum Operation{
PLUS("+")
MINUS("-")
DIVIDE("/")
MULTIPLY("*")
}
然后你可以选择
switch(Operation.valueOf(userInputString)){
case PLUS: return a+b;
case MINUS: return a-b;
case DIVIDE: return a/b;
case MULTIPLY: return a*b;
}
答案 2 :(得分:0)
哈希怎么样?将运算符哈希作为键值对(“+”:+)。对于字符串操作,哈希它并获取值。试验
答案 3 :(得分:0)
如Peter Lawrey所述,ScriptEngine / JavaScript可能是一个不错的选择。访问这个小JavaScript interpreter applet来探索可能性。
答案 4 :(得分:-1)
如果不使用if / else和case / switch,Java仍然是完整的,但你为什么要这样做呢?