我有两个类型的变量int(称为int1和int2)和一个变量类型char(它总是保存数学运算符并称为op)。如何对这三个变量进行数学运算?我必须手动完成,由于老师的原因我无法使用 ScriptEngineManager
我不能这样做,因为它添加了变量在 ascii 表中int res = int1 + op + int2的值。op如何将这三个变量放在一起,根据变量op进行数学运算?
我发现的最简单的方法如下:
int res = 0;
if (op == '+'){res=int1+int2;}
else if (op == '-'){res = int1-int2;}
else if (op == '*'){res = int1*int2;}
else {res = int1/int2;}
Run Code Online (Sandbox Code Playgroud)
还有比这更优雅的方式吗?谢谢你!
创建一个枚举,将操作字符映射到两个整数的函数。
enum Operator {
ADD('+',(x,y)->x+y),
SUBTRACT('-',(x,y)->x-y),
MULTIPLY('*',(x,y)->x*y),
DIVIDE('/',(x,y)->x/y),
REMAINDER('%',(x,y)->x%y),
POW('^',(x,y)->(int)Math.pow(x,y));
char symbol;
BiFunction<Integer,Integer,Integer> operation;
Operator(final char symbol, final BiFunction<Integer,Integer,Integer> operation) {
this.symbol = symbol;
this.operation = operation;
}
public static Operator representedBy(final char symbol)
{
return Stream.of(Operator.values()).filter(operator->operator.symbol==symbol).findFirst().orElse(null);
}
public Integer apply(final int x,final int y)
{
return operation.apply(x,y);
}
}
public static void main(final String[] args) {
final char op = '+';
final int int1 = 1;
final int int2 = 2;
final Operator operator = Operator.representedBy(op);
if (operator == null)
{
// handle bad character
}
else
{
System.out.println(operator.apply(int1,int2));
}
}
Run Code Online (Sandbox Code Playgroud)