Java 使用一个随机算子可以处理多个变量

Java 使用一个随机算子可以处理多个变量,java,random,operator-keyword,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; //T

我想添加一个随机运算符,这样我就可以随机添加/减去/乘/除多个变量。下面的代码不起作用。我认为这是因为随机生成的操作符是一个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;
}
}

我还认为我应该加上,我正在尝试对多个数字做这个,虽然两个数字是好的,但我加的数字越多,它就变得复杂得多,所以我不能真正写出每个组合。也许这是做不到的,但我想我会问的!谢谢

您无法执行您试图执行的操作,因为
'+'
只是一个
字符
,除了值本身之外,没有任何其他含义。无法将其动态转换为代码

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

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);
}
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;
}

您无法执行您试图执行的操作,因为
'+'
只是一个
字符
,除了值本身之外,没有任何其他含义。无法将其动态转换为代码

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

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);
}
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;
}

您可能需要执行以下操作:

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);
}
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;
}

而不是您当前正在做的事情。

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

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);
}
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;
}

而不是你目前正在做的事情。

这是无法做到的。您不能有动态类代码。这无法完成。你不能有动态类代码。我的答案是一个更面向对象的版本。尼斯:)我的答案的一个更面向对象的版本。尼斯:)我可以看到这一点,但当我使用6个变量时,加/减/乘/除它们的组合数量是巨大的,我希望有一种更快的方法。我认为,没有除法,大约有160种组合,除法会让它变得更大!谢谢你的回复@Dodo:他并没有使用randomInteger来选择序列中的哪个操作,而是对任何一对操作数应用哪个特定操作。链式变量的数量无关紧要。看看Jack的答案,它比我的答案更可靠。我的代码更适合快速一次性使用。我想我现在明白了!谢谢你帮助杰克和大卫!我可以看到这一点,但当我使用6个变量时,加/减/乘/除它们的组合数量是巨大的,我希望有一种更快的方法。我认为,没有除法,大约有160种组合,除法会让它变得更大!谢谢你的回复@Dodo:他并没有使用randomInteger来选择序列中的哪个操作,而是对任何一对操作数应用哪个特定操作。链式变量的数量无关紧要。看看Jack的答案,它比我的答案更可靠。我的代码更适合快速一次性使用。我想我现在明白了!谢谢你帮助杰克和大卫!