0

次のコードを使用して乱数を生成しました。

long randNo = Math.round(Math.random() * 10000);

重複を見つけた状況がいくつかあります。同じ数を生成する可能性はありますか?

4

2 に答える 2

2

はい、可能です。0 から 9999 までの 10000 個の異なる乱数を生成する必要がある場合、10000 個の連続した数字のリストを生成してから呼び出すことができますCollections.shuffle

于 2012-10-15T07:33:54.183 に答える
1

乱数を使用すると、範囲内のすべての数値の可能性が等しくなります。これは、数値を取得した場合、次の値が最初に表示されたときと同じように表示される可能性が高いことを意味します。

ところで: 1 から 9999 までの数字は同じように発生する可能性が高いため、丸めを使用することはお勧めできませんが、0 と 10000 の数字は、半分の切り捨てまたは半分の切り上げでのみ発生する可能性が半分です。

より効率的なパターンを使用することです

Random rand = new Random();

// as needed
int num = rand.nextInt(10000); // will be [0, 10000)

一意の番号を生成する必要がある場合は、 Collections.shuffle を使用できます

List<Integer> nums = new ArrayList<Integer>();
for(int i = 0; i < 10000; i++) nums.add(i);
Collections.shuffle(nums);

これにより、ランダムな順序で最大 10000 個の一意の番号が得られます。

于 2012-10-15T07:55:04.780 に答える