使用随机运算符的许多变量

时间:2014-07-27 00:17:35

标签: java random operator-keyword

我想添加一个随机运算符,这样我就可以随机添加/减去/乘/除多个变量。下面的代码不起作用。我认为这是因为随机生成的运算符是一个实际上具有值的char,因此它被添加而不是用作运算符。无论如何,我是新来的,任何帮助都会非常感谢!

class ClassA{
public static void main(String[] args){
    ClassB x = new ClassB();

    int a=1,b=2,c=3,d=4;
    int answer;

    //Trying to achieve
    //answer = a (+,-,*,/) b (+,-,*,/) c (+,-,*,/) d
    //i.e
    answer = a+x.randomOperator()+b+x.randomOperator()+c+x.randomOperator()+d;

    System.out.println("answer="+answer);

}
}

我在另一个类中生成随机运算符符号。

import java.util.Random;

public class ClassB{
public char randomOperator(){
    Random rv = new Random();
    int apples = rv.nextInt(3);
    char operator;

    switch (apples)
    {
        case 1:
            operator = '+';
            break;
        case 2:
            operator = '-';
            break;
        case 3:
            operator = '*';
            break;
        default:
            operator = '/';
            break;
    }
    return operator;
}
}

我还认为我应该补充一点,我试图为多个数字做这个,而两个数字很好,我添加的数字越多,它就越复杂,所以我无法真正写出每个组合。也许这不能做,但我想我会问!谢谢!

2 个答案:

答案 0 :(得分:4)

由于'+'只是一个char并且除了值本身之外没有任何其他含义,因此您无法执行您要执行的操作。它无法动态转换为代码。

我想到的更简单的解决方案就是:

interface Operation {
  int eval(int a, int b);
}

class Addition {
  int eval(int a, int b) { return a + b; }
}

class Subtraction {
  int eval(int a, int b) { return a - b; }
}

...

Operation[] operations = new Operation[]{new Addition(), new Subtraction(), ..};

int executeRandom(int a, int b) {
  return operations[random.nextInt(operations.length)].eval(a,b);
}

答案 1 :(得分:2)

您可能希望执行以下操作:

Random randomInteger = new Random();
switch(randomInteger.Next(0, 4)) // Grab a random integer between [0, 4)
{
    case 0: // Add
        return a + b;
    case 1: // Subtract
        return a - b;
    case 2: // Multiply
        return a * b;
    case 3: // Divide
        return a / b;
}

而不是你现在正在做什么。