【问题标题】:Get Random Functions from Main从 Main 获取随机函数
【发布时间】:2012-08-04 04:12:54
【问题描述】:
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")

【问题讨论】:

    标签: java function main


    【解决方案1】:

    创建一个包含 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;
              //  ...
        }
    }
    

    【讨论】:

    • 这是迄今为止最适合您的解决方案。不要通过实现一个接口和多个类来过度架构它。这样,您可以将现有代码保留在 getRandomFunc 中,然后在其上添加。
    • 嗨,我对 java/编程很陌生。你能再解释一下吗。我为此创建一个新功能吗?还是在 GetRandomFunc() 中?
    • 我如何将 i 作为参数传递给 GetRandomFunc()。请详细说明,如果您这样做,我将不胜感激。谢谢。
    • 我编辑了答案以获得函数的新定义。您需要将索引传递给函数,因为它是由它确定的
    • 您似乎导入了 java.awt.*,而 java 认为您正在使用 java.awt.List。改用支持泛型参数的 java.util.List
    【解决方案2】:

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

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

    【讨论】:

      【解决方案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!");
        }
      }
      ...
      

      【讨论】:

      • 你不能真正在java中创建一个函数列表(除非这是一些接口)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多