Java 使用一个随机算子可以处理多个变量
我想添加一个随机运算符,这样我就可以随机添加/减去/乘/除多个变量。下面的代码不起作用。我认为这是因为随机生成的操作符是一个char,它实际上有一个值,所以它被添加而不是用作操作符。无论如何,我在这方面是新手,任何帮助都会很好,谢谢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
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的答案,它比我的答案更可靠。我的代码更适合快速一次性使用。我想我现在明白了!谢谢你帮助杰克和大卫!