0

そのため、特定のメソッドが呼び出される方法をランダム化して、各メソッドがインスタンスごとに 1 回だけ呼び出され、すべてのメソッドが呼び出されるようにしました。

したがって、それらが順番に呼び出される 1 つのインスタンスを言います。

メソッド2 メソッド4 メソッド3 メソッド1

しかし、次のインスタンスでは別の順序で呼び出されます。

メソッド3 メソッド2 メソッド1 メソッド4

順序をランダム化する必要があるコードは次のようになります。

public void randomCalls(){
    int[] order = new int[4];

    for(int i=0; i<order.length; i++){
        order[i]=nextNumber(order);
    }
}

public int nextNumber(int[] array){
    Random r = new Random();
    int x = r.nextInt();
    for(int i=0; i<array.length; i++){
        if(arrayHasNumber(array,x)){
            x = nextNumber(array);
        }
    }
    return x;
}

public boolean arrayHasNumber(int[] array, int x){
    for(int i=0;i<array.length;i++){
        if(array[i]==x){
            return true;
        }
    }
    return false;
}
4

4 に答える 4

2

@Aurand の提案に基づいて、メソッドを呼び出すスイッチと、List<Integer>呼び出したいメソッドのインデックスを含むスイッチを用意し、 を使用Collections.shuffleして呼び出してリスト要素をシャッフルし、メソッドを呼び出すことができswitchます。コードサンプル:

final int METHODS_QUANTITY = 4;
List<Integer> lstIndexes = new ArrayList<Integer>();
for(int i = 1; i <= METHODS_QUANTITY; i++) {
    lstIndexes.add(i);
}
//you can change the condition for the number of times you want to execute it
while(true) {
    Collections.shuffle(lstIndexes);
    for(Integer index : lstIndexes) {
        switch(index) {
            case 1: method1(); break;
            case 2: method2(); break;
            case 3: method3(); break;
            case 4: method4(); break;
        }
    }
}

それでもなお、疑問が残ります: 実際のアプリケーションでなぜこれが必要なのですか?

于 2013-03-28T05:08:28.673 に答える
1

何かのようなもの

LinkedList methods
methods.add(1)
methods.add(2)
....

for(i=0; i<methods.size;i++)
r = random.next(methods.size)
switch(methods.get(r)) {
case 1: method1()
case 2: method2()
...
methods.remove(methods.get(r)
于 2013-03-28T05:06:04.323 に答える
1

私のヒントは、初期化ArrayList中にすべてのメソッド名に & をスローすることです。

次に、 を使用して乱数を取得し、random(list.size())その要素を から取り出しArrayListます。

ケースを使用し、switchどんなメソッド名が飛び出しても、そのメソッドを呼び出します。

リストが空になるまで、これを続けます。

于 2013-03-28T05:06:20.793 に答える
0

おそらく、状態 (呼び出しが行われた順序) を内部変数または配列に保持する必要があります (すべてを保持する必要がある場合)。次に、この状態変数を使用するように呼び出しサイトを調整します。

于 2013-03-28T05:05:37.183 に答える