3
public static GetRandomFunc() {
    switch((int)(Math.random()*NUM_FUNCTIONS)  {
        case 0:
            functionA();
            break;
        case 1:
            functionB();
            break;
        case 2:
            functionC();
            break;
          //  ...
    }
}

我想在 main 中随机调用 GetRandomFunc() ,直到每个函数都被调用一次然后结束。我如何确保一个函数只被调用一次,如果所有函数都被调用,它会打印出 System.out.println("All done")

4

3 回答 3

5

创建一个包含 0,1 和 2 的列表。对其进行洗牌并对其进行迭代以调用每个函数一次,但以随机顺序。

List<Integer> integers = Arrays.asList(0,1,2);
Collections.shuffle(integers)
for (Integer i: integers){
   GetRandomFunc(i)
}

你的功能将是

public static GetRandomFunc(int index) {
    switch(index)  {
        case 0:
            functionA();
            break;
        case 1:
            functionB();
            break;
        case 2:
            functionC();
            break;
          //  ...
    }
}
于 2012-08-07T07:19:17.867 回答
3

使用Runnables 列表(或映射到每个函数的整数列表,就像您在代码中所做的那样),对其进行洗牌,然后遍历列表并调用每个函数。

http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle%28java.util.List%29

于 2012-08-07T07:19:29.543 回答
3

列出功能并从中随机获取。当它为空时,您可以确定每个函数都只使用了一次。

public interface Function { void execute(); }

public static runFunctionsRandomly(List<Function> functions) {
  while (!functions.isEmpty()) {
      int index = Math.random() * functions.size();
      Function f = functions.get(index);
      f.execute();
      functions.remove(index);
  }
}

class ExampleFunction implements Function {
  void execute() {
    System.out.println("Hello world!");
  }
}
...
于 2012-08-07T07:16:38.340 回答