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

各関数が一度呼び出されて終了するまで、メインでGetRandomFunc()をランダムに呼び出したいと思います。関数が1回だけ呼び出され、すべてが呼び出された場合は、System.out.println( "All done")が出力されるようにするにはどうすればよいですか。

4

3 に答える 3

5

0、1、および2を含むリストを作成します。リストをシャッフルして繰り返し処理し、各関数をランダムな順序で1回呼び出します。

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

関数のリストを作成し、そこからランダムに取得します。空の場合は、すべての関数を1回だけ使用したことを確認できます。

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 に答える
3

sのリストRunnable(またはコードで行ったように、各関数にマッピングされている整数のリスト)を使用してシャッフルし、リストを反復処理して各関数を呼び出します。

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

于 2012-08-07T07:19:29.543 に答える