3

乱数を生成するためにJavaにランダム関数があることを知っています

for example 

       int randomNumber = ( int )( Math.random() * 9999 );

[0,9999] から randomNumber を生成しますが、指定された範囲で 1 つの数値のみを返します。

しかし、組み込み関数があるかどうか、または複数の乱数を生成し、互いに一致しないネイティブ関数と言うことができるかどうかを知りたいだけです

上記の例から、4つの数値を生成したい場合を想定します

1,10,50,5544 のように返されます

ここでは 4 つの乱数があり、互いに一致していないことがわかります。

4

6 に答える 6

4

このようなことを試してください

を作成しArrayListて乱数を追加し、追加中ArrayListにその数が既に含まれているかどうかを確認します。

例えば:

ArrayList<Integer> numbers = new ArrayList<Integer>();
while (numbers.size()<=YOUR_MAX_SIZE)
{
    int randomInteger = ( int )( Math.random() * 9999 );
    if (!numbers.contains(randomInteger)) {
    {
       numbers.add(randomInteger);
    }
}
于 2013-07-11T06:07:21.940 に答える
4

別の手法 (@MichaelShrestha によって示されているもの以外) は、数値の範囲全体をコレクションに入れ、それをシャッフルして、シャッフルされた順序で数値を取得することです。

他の方法では、重複しないランダム値を見つけるために多くの (多数の) 数値をスピンする可能性がありますが、これは 1 回実行するだけでよいという利点があります。OTOH、数値の小さなコレクションの場合、@Michael の手法の方が高速な場合があります。

于 2013-07-11T06:08:54.130 に答える
3

ここで提案されているように、これを試してください:

int min = 1;
int max = 10000;

Random r = new Random();
int i1 = r.nextInt(max - min + 1) + min;

編集:

重複なし:

Random rng = new Random(); // Ideally just create one instance globally
int min = 1;
int max = 10000;
Set<Integer> generated = new LinkedHashSet<Integer>();
while (generated.size() < numbersNeeded)
{
    Integer next = r.nextInt(max - min + 1) + min;
    generated.add(next);
}

リンク

于 2013-07-11T06:09:31.997 に答える
0

組み込みの API はありません。しかし、あなたはこのようなものを使うことができます

public static int[] getRandoms(int amount, int range){
    int[] result = new int[amount];
    ArrayList tempList = new ArrayList();
    for(int i = 0; i< range; i++)
       tempList.add(i);
    Collections.shuffle(tempList);
    for(int i = 0; i< amount; i++)
       result[i] = (int)tempList.get(i);
    return result;
}

ここで amount は必要な乱数の数で、 range は乱数の最大範囲です

于 2013-07-11T06:12:36.817 に答える
0

HashSetには一意のオブジェクトが含まれているため...一意の乱数を持つことができます。

Set uniqueRandomNumber = new HashSet();
 int i = 5 //number Of Random Number Required;
 for(int = 0; i<5; 1++){
    int randomNumber = ( int )( Math.random() * 9999 );
    uniqueRandomNumber.add(randomNumber);
 }
于 2013-07-11T06:25:31.143 に答える