2

乱数のリストを取得して、乱数を繰り返さずにキューに入れようとしています。

        int number = 40;

        for (int j = 0; j<number; j++)
        {
            int pick = random.nextInt(number);
            myQueue.add(Integer.toString(pick));
        }
        System.out.println("the queue size: "+myQueue.size());
        Iterator it = myQueue.iterator();
        while(it.hasNext()){
                String iteratorValue = (String)it.next();
                System.out.println("queue next value: "+iteratorValue);
        }

上記のコードで、乱数を繰り返しました

誰もがそれを行う方法を知っていますか?

4

3 に答える 3

8

これはどう:

List<String> list = new ArrayList<String>(number);

for (int i = 0; i < number; i++)
    list.add(Integer.toString(i));

Collections.shuffle(list);

myQueue.addAll(list);

ある範囲で「一意の乱数を追加する」ことは、その範囲内のすべての番号を追加してから結果をシャッフルすることと同じです。

于 2013-01-05T18:44:10.657 に答える
3

セットを作成し、生成時に番号を追加します。新しい番号を生成するたびに、セットにその値がすでに含まれているかどうかを確認してください。まだそこにないものが見つかるまで、新しい番号を生成し、セットをチェックし続けます。

これらの線に沿った何か...(Set.add(...)値がすでにセットにある場合はfalseを返すため、一意の番号が生成されるまでdo-whileループが続行されることに注意してください。)

   int number = 40;
   Set mySet = new HashSet();
   for (int j = 0; j<number; j++)
   {
       Integer pick;

       do{
           pick = random.nextInt(number);
       } while(!mySet.add(pick));
       myQueue.add(Integer.toString(pick));
   }
   System.out.println("the queue size: "+myQueue.size());
   Iterator it = myQueue.iterator();
   while(it.hasNext()){
           String iteratorValue = (String)it.next();
           System.out.println("queue next value: "+iteratorValue);
   }

ARSで言及されているように、ランダムな一意の番号を探しているのではなく、0から40までのすべての番号のランダムにシャッフルされたリストを探しているようです。その場合は、彼/彼女のソリューションをそのまま使用してください。その目標を達成するためのより良い方法。

于 2013-01-05T18:43:45.040 に答える
0

乱数の範囲が狭い場合は、使用可能な値を使用Collections.shuffleしてリストを生成し、リストで使用できます。

于 2013-01-05T18:45:34.543 に答える