0

配列をランダム化またはシャッフルする 配列をランダム化またはシャッフルする

これが最善のアプローチであるかどうかはわかりません。

3 つの項目を持つ配列のインデックスをランダム化したい。

12 4 5

int numbers[] = new int[3];

Maths.Random を使ってみた

int randomoption2 = opmin + (int)(Math.random() * ((opmax - opmin) + 1));

しかし、インデックス値の繰り返しに問題があります。繰り返しがないようにインデックスをランダム化する最良の方法は何ですか。

例えば

a[1] = 2;

配列内の 2 つの要素が 1 のインデックスで返されることは望ましくありません

http://www.exampledepot.com/egs/java.util/coll_Shuffle.html

public class randomorder {

        public static void main(String [] args)
        {
            randomorder();  
            System.out.println(randomorder());
        }

        public static ArrayList randomorder(){
            ArrayList nums = new ArrayList();
            nums.add(1);
            nums.add(2);
            nums.add(3);

            Collections.shuffle(nums);
            return nums;
        }
    }

出力できるように、各数値を変数に格納する必要があります

System.out.println(オプション[0]);

4

2 に答える 2

6

使用Collections.shuffle:

Integer[] numbers = { 1, 2, 3, 4, 5 };
Collections.shuffle(Arrays.asList(numbers));

オンラインでの動作を確認してください: ideone

内部では、Fisher-Yates shuffleを使用しています。これは、重複を生じさせない効率的なシャッフル アルゴリズムです。

関連している

于 2012-08-08T20:03:41.227 に答える
0

ブール値の配列を介して 3 つのブール値を維持するだけです。0、1、または 2 つのインデックスにヒットしたら、それらを true に設定します。

ランダムな位置を選択し、 while(boolean[number selected] == true) ランダムな選択をやり直します。

于 2012-08-08T20:03:49.037 に答える