Сгенерировал арифметическую операцию -- не совсем так, был сгенерирован символ операции, полученный из строки.
Для применения некой операции к неким числам следует сопоставить значение символа с неким действием, например, при помощи switch
:
int result;
switch (ch) {
case '+': result = x + y; break;
case '-': result = x - y; break;
case '*': result = x * y; break;
default: throw new IllegalArgumentException("Bad operation: " + ch);
}
switch
-выражение (Java 14+):
int result = switch (ch) {
case '+' -> x + y;
case '-' -> x - y;
case '*' -> x * y;
default -> throw new IllegalArgumentException("Bad operation: " + ch);
};
Однако, в Java можно определить операции, используя функциональные интерфейсы, в данном случае может подойти IntBinaryOperator
, принимающий два аргумента и возвращающий результат типа int
, или же BiFunction<T1,T2,R>
, для которого можно дополнительно специфицировать типы аргументов и результата.
IntBinaryOperator add = (a, b) -> a + b;
IntBinaryOperator sub = (a, b) -> a - b;
IntBinaryOperator mul = (a, b) -> a * b;
IntBinaryOperator[] ops = {sub, add, mul};
int x = 10;
int y = 20;
for (int i = 0; i < 5; i++) {
IntBinaryOperator op = ops[(int)(Math.random() * ops.length)];
System.out.println("Random op of x and y = " + op.applyAsInt(x, y));
}
Random op of x and y = 200
Random op of x and y = -10
Random op of x and y = 30
Random op of x and y = 30
Random op of x and y = 200