に限定されていない場合はArrayList
、HashSet<Integer>
代わりに (またはより良いのはLinkedHashSet ) を使用してください。HashSet<Integer>
コレクションに重複した値がないことを保証LinkedHashSet<Integer>
し、同じことを行い、アイテムの順序も保持します。
がどうしても必要な場合はArrayList
、次のようにします。
public RandomNumbers(){
HashSet<Integer> set = new HashSet<Integer>();
// generating and adding random numbers to the list
//for (int i=0; i<MemoryGame.totalAnswers; i++)
while (set.size()<MemoryGame.totalAnswers)
set.add(randomNums.nextInt(32));
randomNumberList.addAll(set); // dump the set in your ArrayList
System.out.println("Numbers in the list: " + randomNumberList);
System.out.println("");
}
また、 の場合は、代わりにランダム リストMemoryGame.totalAnswers == 32
を使用してこのプロセスを高速化できます。
public RandomNumbers(){
// generating and adding random numbers to the list
for (int i=0; i<MemoryGame.totalAnswers; i++)
randomNumberList.add(i);
Collections.shuffle(randomNumberList);
System.out.println("Numbers in the list: " + randomNumberList);
System.out.println("");
}
**更新**
以来MemoryGame.totalAnswers == 8
、最後のスニペットは忘れてください。誰かがそれを必要とするなら、私はそこに残します。pstの提案に従って、 a の使用をSet
完全にスキップできます。
public RandomNumbers(){
// generating and adding random numbers to the list
for (int i=0; i<32; i++)
randomNumberList.add(i);
Collections.shuffle(randomNumberList);
// keep only the first ones we need
randomNumberList.removeRange(MemoryGame.totalAnswers + 1, 32);
System.out.println("Numbers in the list: " + randomNumberList);
System.out.println("");
}