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

我想随机调用GetRandomFunc(),直到每个函数被调用一次,然后结束。如何确保函数只被调用一次,如果全部被调用,则打印出System.out.println(“全部完成”)从主中获取随机函数

回答

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; 
      // ... 
    } 
} 
+0

这是迄今为止最适合您的解决方案。不要通过实现一个接口和多个类来构建它。通过这种方式,您可以将现有的代码保存在getRandomFunc中,并添加到其中。 – Brad 2012-08-07 07:23:47

+0

嗨,我真的很新的Java /编程。你能多解释一下吗?我是否为此创建了一个新功能?或者它在GetRandomFunc()中? – user872009 2012-08-07 07:32:02

+0

如何将我作为参数传递给GetRandomFunc()。请详细说明一下,如果你这么做,我会很感激。谢谢。 – user872009 2012-08-07 07:33:15

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

你不能真正创造的功能在java中的列表(除非这是一些接口) – MByD 2012-08-07 07:18:19