2

指定された範囲で一意のランダムな int が必要です。私はこのアプローチを使用します:

class Main
{
static final int RANGE = 100;

static int uniqueGenerator(int range_, boolean boolArr_[], Random rand_)
{
    int tmpVar = rand_.nextInt(range_);
    while (boolArr_[tmpVar] == true)
    {
        tmpVar = rand.nextInt(range_);
    }
    boolArr_[tmpVar] = true;
    return tmpVar;
}

public static void main(String[] args)
{
    Random rand = new Random();  
    boolean boolArr[] = new boolean[RANGE];
    Arrays.fill(boolArr, false);
    int ceiling = 10;
    int tmp = Main.uniqueGenerator(ceiling, boolArr, rand);
    System.out.println(tmp); => 5
    ceiling = 20;
tmp = Main.uniqueGenerator(ceiling, boolArr);
    System.out.println(tmp); => 17

}
}

面倒そうです。多分誰かがより良いアプローチを知っていますか?編集:ゲームコードで使用するため、最も効率的なソリューションが必要です。以下の回答は、新しいリストを初期化してシャッフルすることを提案しています=>リソースを消費しすぎている/範囲を変更する必要があるたびに新しいリストを生成する必要があります。

4

3 に答える 3

7
List<Integer> list = new ArrayList<Integer>();
for(int i = 1; i <= 100; i++) list.add(i);
Collections.shuffle(list);
于 2013-03-09T11:20:09.190 に答える
4

配列に必要な数の範囲を入力し、シャッフルしてアイテムを抽出します。

編集:Eng.Fouadの例を見て、これがどのように実装されているかを確認してください。

于 2013-03-09T10:40:24.297 に答える
3

乱数を生成してセットに格納する

Set<Integer> set = new HashSet<Integer>(100);
    Random rand = new Random();
    while (set.size() < 1000) {
        set.add(rand.nextInt(100));
    }

    for (Integer integer : set) {
        System.out.println(integer);
    }
于 2013-03-09T11:16:48.930 に答える