簡體   English   中英

在Java中生成唯一隨機數的更好方法

[英]Better way to generate unique random numbers in Java

我需要在指定范圍內使用唯一的隨機整數。 我用這個approch:

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

}
}

這似乎很麻煩。 也許有人知道更好的方法? 編輯:我在游戲代碼中使用它,所以我需要最有效的解決方案。 下面的答案建議初始化新列表,將其洗牌=>太耗費資源/每次需要更改范圍時都需要生成新列表。

List<Integer> list = new ArrayList<Integer>();
for(int i = 1; i <= 100; i++) list.add(i);
Collections.shuffle(list);

使用您想要的數字范圍填充數組,隨機播放並提取項目。

編輯:查看Eng.Fouad的示例 ,了解它是如何實現的。

生成並存儲集合中的隨機數

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);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM