簡體   English   中英

在Java中生成一組唯一的隨機數

[英]Generate set of unique random numbers in Java

我想在0-500范圍內創建10個隨機數。 但問題是我希望這些數字是唯一的。 對於2個隨機數,我可以創建如下內容:

int randomItem1 = r.nextInt(500);
int randomItem2 = r.nextInt(500);
while(randomItem1==randomItem2){
    randomItem1=randomItem();
    randomItem2=randomItem();
}

但是,如果我這樣做10,我認為它會堆疊。 而且我這樣說是因為我正在嘗試創建一個巨大的算法,它試圖進行連續的評估,我想要不斷地獲取10個隨機和唯一的數字。 我不知道該怎么辦。 任何想法或建議?

看起來您將這些存儲在單個變量中。 存儲此類項目組的“正常”位置通常位於列表或數組中。

在這種情況下,請將它們存儲在“set”數據結構中。 它不允許重復。

設置文檔: http//docs.oracle.com/javase/1.5.0/docs/api/java/util/Set.html

Set set = new HashSet();

while (set.size() < 10) {
    set.add(r.nextInt(500));
}

Java Collections有一個shuffle方法。 您可以將您的數字放入ArrayList,然后將其內容隨機播放。 如果ArrayList包含n個數字,則調用shuffle方法將為您提供包含n個數字但隨機排列的相同ArrayList。

for(int i=0;i<10;i++){
list.add(i);  // list contains: [0,1,2,3,4,5,6,7,8,9]
}
Collections.shuffle(list);// list now contains: [0, 9, 3, 1, 5, 8, 7, 2, 6, 4]

每次使用Fisher-Yates shuffle使用數字時,從1-500創建一個數字的LinkedList並將其中的一個洗牌

這將為您提供每個拉出數字的保證理智(恆定時間)性能。

我會使用一個數組,並將它們生成的數字存儲到該數組中。 您將生成一個新的隨機數,然后需要迭代您的數組直到您的數字計數,檢查它是否與您之前創建的任何匹配。

暫無
暫無

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

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