Java 从Main获取随机函数

Java 从Main获取随机函数,java,function,main,Java,Function,Main,我想在main中随机调用GetRandomFunc(),直到每个函数调用一次,然后结束。如何确保一个函数只调用一次,如果调用了所有函数,它会打印出System.out.println(“全部完成”)列出函数并随机抽取。当它为空时,您可以确保每个函数只使用了一次 public static GetRandomFunc() { switch((int)(Math.random()*NUM_FUNCTIONS) { case 0: functionA(

我想在main中随机调用GetRandomFunc(),直到每个函数调用一次,然后结束。如何确保一个函数只调用一次,如果调用了所有函数,它会打印出System.out.println(“全部完成”)

列出函数并随机抽取。当它为空时,您可以确保每个函数只使用了一次

public static GetRandomFunc() {
    switch((int)(Math.random()*NUM_FUNCTIONS)  {
        case 0:
            functionA();
            break;
        case 1:
            functionB();
            break;
        case 2:
            functionC();
            break;
          //  ...
    }
}
公共接口函数{void execute();}
公共静态运行函数随机(列出函数){
而(!functions.isEmpty()){
int index=Math.random()*functions.size();
函数f=函数.get(索引);
f、 执行();
函数。删除(索引);
}
}
类ExampleFunction实现函数{
void execute(){
System.out.println(“你好,世界!”);
}
}
...

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

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!");
  }
}
...

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


您无法真正用java创建函数列表(除非这是某种接口),这是目前为止最适合您的解决方案。不要通过实现一个接口和多个类来构建它。通过这种方式,您可以将现有代码保存在getRandomFunc中,并在其上添加代码。您好,我对java/编程非常陌生。你能再解释一下吗。我是否为此创建新函数?或者它位于GetRandomFunc()中,如何将i作为参数传递给GetRandomFunc()。请详细说明,如果你这样做,我将不胜感激。谢谢。我编辑了答案以获得函数的新定义。您需要将索引传递给函数,因为它是根据ITI确定的。您似乎导入了java.awt.*并且java认为您正在使用java.awt.List。改为使用java.util.List,它支持通用参数
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;
          //  ...
    }
}