【问题标题】:Using a random operator many variables使用随机运算符许多变量
【发布时间】:2014-07-27 00:17:35
【问题描述】:

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

我还认为我应该添加我正在尝试对多个数字执行此操作,虽然两个数字很好,但我添加的数字越多,它就越复杂,所以我无法真正写出每个组合。也许这只是无法做到,但我想我会问!谢谢!

【问题讨论】:

  • 这无法完成。你不能有动态类代码。

标签: java random operator-keyword


【解决方案1】:

你不能做你想做的事情,因为'+' 只是一个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);
}

【讨论】:

  • 我的答案的更多 OOP 版本。不错:)
【解决方案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;
}

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

【讨论】:

  • 我可以看到这一点,但是当我将使用 6 个变量时,添加/减去/乘/除它们的组合数量是巨大的,我希望有一种更快的方法。我认为没有划分大约有 160 种组合,划分它会变得更大!不过感谢您的回复!
  • @Dodo:他没有使用randomInteger 来选择序列的哪个操作,而是哪个特定操作适用于任何一对操作数。链接变量的数量无关紧要。
  • 查看 Jack 的答案,了解比我的更强大的东西。我的代码更适合一次性使用。
  • 我想我现在明白了!谢谢你帮助杰克和大卫!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2017-06-07
  • 2014-12-30
  • 1970-01-01
  • 2011-01-16
  • 2019-05-23
  • 1970-01-01
相关资源
最近更新 更多