0
static int n = -1;  
private static int repeatBuffer[] = new int[10];
static {
    repeatBuffer[0] = 0;
    //and more
    repeatBuffer[9] = 9;
}
static public void randomize() {

    do {
        Random r = new Random();
        randomNumber = r.nextInt(20);
    } while (!uniqueInt(randomNumber));
    Log.e(TAG, "" + randomNumber); //here I need have a unique int
}

private static Boolean uniqueInt(int random) {

    for (int i = 0; i < 9; i++) {
        if (random == repeatBuffer[i]) {
            return false;
        }
    }
    if (++n > 9)
        n = 0;
    repeatBuffer[n] = random;
    return true;
}

同じ int を 2 回取得することがありますが、どこに問題があるのでしょうか? そして、それは仕事ですか?私はこれにかなりの時間を費やし、あきらめます。コードに微調整が必​​要だと思います:)

4

3 に答える 3

5

ランダムな int を取得する簡単な方法は、整数のリストを作成し、List<Integer>必要な数値を追加することです。次に、を使用してリストをシャッフルしCollections.shuffle(list);ます。リストの先頭から読み取りを開始すると、毎回一意のランダムな int が得られます。

リストから数値を「読み取る」たびに、その数値をリストから削除するか、読み取った場所のインデックスを増やしてください。

于 2013-09-16T19:42:04.960 に答える
3

これは、乱数ジェネレーターの通常の動作です。数の分布が均一である限り、繰り返し数を生成しても問題ありません。

一意の乱数のセットが必要な場合は、ループ内でそれらを生成し、新しく生成された数が生成された数のセットに存在するかどうかを繰り返しごとに尋ねることができます。そうでない場合は追加し、そうであれば、セットが目的のサイズになるまで繰り返します。

于 2013-09-16T19:41:51.743 に答える
2

ええと、1 から 20 までの一意のランダムですか? 21回目を実行するとどうなりますか?

List1 から 20 までの整数を作成してみてくださいCollections.shuffle()。リストをシャッフルするために使用します。次に、リストの先頭から最初の項目をポップして、それを使用します。

于 2013-09-16T19:42:47.387 に答える