2016-12-23 9 views
-3
for (int x = 0 ; x < chosenQ.length ; x++) 
{ 
    chosenQ [x] = r.nextInt (9); 
    c.println (chosenQ [x]); 
} 

これは、0と9の間に5のintを生成します。それを生成するときに重複するintを持たないようにするにはどうすればよいですか?重複するランダムintを防ぐ方法

+1

この質問に「javascript」とタグ付けされています...「java」にする必要があります。 – quarterpi

+0

可能な値の小さなセットであり、これらの値を繰り返しなくしたい場合は、すべての可能な値の配列を作成し、シャッフルして最初のn *(5)*値を取る。 – Thomas

答えて

0

すでに選択されている番号を記録しておく必要があります。

これを行う方法の1つは、すべての値がfalseに初期化されているブール値配列に値を格納することです。ランダム値が生成されると、そのインデックスの要素はtrueに設定されます。次に、生成された番号ごとに、そのインデックスの要素がtrueまたはfalseであるかどうかを確認するだけです。

例えば、

// array of booleans initialized to false 
boolean[] array = new boolean[chosenQ.length]; 

for (int x = 0 ; x < chosenQ.length ; x++) 
{ 
     int i = r.nextInt(9); 
     // check if value was chosen already 
     while (array[i] == true) 
      i = r.nextInt(9); 

     // set generated value's index in array to true 
     array[i] = true; 

     chosenQ[x] = i; 
     c.println(chosenQ[x]); 
} 
+0

これはかなり非効率的なアプローチである。 – Thomas

+0

これをメモリ効率の良い方法にするには、['BitSet'](https://docs.oracle.com/javase/8/docs/api/java/util/)を使用する必要があります。 BitSet.html)を追加する必要があります。 – 4castle

1
  • 0から9
  • に10個の要素を持つ配列を作成し、アレイ
  • 擬似コード

    で最初の5つの要素

を取るシャッフル

array = [0, 1, ..., 9] 
array.shuffle.take(5) 
関連する問題