Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何随机选择操作员?_Java - Fatal编程技术网

Java 如何随机选择操作员?

Java 如何随机选择操作员?,java,Java,尝试选取随机数,然后将它们相加、相乘或相除。int solution=operators[x](a、b)我意识到这是垃圾。是否存在从数组中随机选取一个函数(方法?)然后输入整数的方法 我知道我可以用if-else这样的语句 如果x=1,则添加 如果x=2,则相乘,以此类推 但我希望有一种更复杂的方法 谢谢这些最简单的方法是使用开关语句。假设静态方法: public class Operator{ public int add(int a, int b){ return a

尝试选取随机数,然后将它们相加、相乘或相除。
int solution=operators[x](a、b)我意识到这是垃圾。是否存在从数组中随机选取一个函数(方法?)然后输入整数的方法

我知道我可以用if-else这样的语句 如果x=1,则添加 如果x=2,则相乘,以此类推 但我希望有一种更复杂的方法
谢谢

这些最简单的方法是使用
开关
语句。假设
静态
方法:

public class Operator{
    public int add(int a, int b){
        return a+b;
    }
    public int multiply(int a, int b){
        return a*b;
    }
    public int minus(int a, int b){
        return a-b;
    }
    public int divide(int a, int b){
        return a/b;
    }
}
int a = 1 + random.nextInt(19);
int b = 1 + random.nextInt(19);
int x = random.nextInt[2];
Operator[] operators = {add(),minus(),multiply()};
System.out.println("Question " + (i+1) +":\n " + "What is " + a + " operators[x] " + b + "?");
int answer = in.nextInt();
int solution = operators[x](a,b);
或一系列条件运算符:

final int solution;
switch (x) {
    case 0: solution = add(a, b);      break;
    case 1: solution = multiply(a, b); break;
    case 2: solution = subtract(a, b); break;
    case 3: solution = divide(a, b);   break;
    default: throw new Error();
}
“聪明”的方法是使用lambda表达式

int solution =
    x==0 ? add(a, b)      :
    x==1 ? multiply(a, b) :
    x==2 ? subtract(a, b) :
         ? divide(a, b)   ;

或者,
enum
可以同时为您提供名称和运算符。

我认为您不必担心此类代码的复杂性。记住接吻原则。我更多的意思是短而不是长=)注意:您的
操作符
界面有一个标准对应项:。也许值得用它来代替?好的。这只是一个建议,您现在也可以在开关箱中使用屈服特性。@AndyTurner有。但这其中的数量是有限的。这里我更喜欢一个特定的界面。@AmanChhabra或新表单
switch
label。我必须确定,但是的,不是14中的预览功能。但实际上,您可能还需要一个名称,这需要一个传统的开关。@HenryGarrett您可以在
解决方案
旁边为
名称
变量赋值它不必是
final
,但它确实确保变量只分配一次。请注意,此代码永远不会选择divide分支。
interface Operator {
    int op(int a, int b);
}
Operator[] ops = {
    (a, b) -> a + b,
    (a, b) -> a * b,
    (a, b) -> a - b,
    (a, b) -> a / b,
};
// ...
int solution = ops[x].op(a,b);
import java.util.Random; 

public class generateRandom{ 

    public static void main(String args[]) 
    { 
        // create instance of Random class 
        Random rand = new Random(); 

        // Generate random integers in range 0 to 3
        int result = rand.nextInt(4);
        switch (result)
        {
           case 0:
           //Java code for add(...)
           ;
           case 1:
           //Java code for multiply(...)
           ;
           case 2:
           //Java code for minus(...)
           ;
           case 3:
           //Java code for divide(...)
           ;
           default:
           //Java code what for ever you want
           ;
         }
    }

}