2013-02-12 89 views
1

我有以下代碼生成5位數的隨機數並將它們添加到ArrayList。但是這些數字必須是唯一的ID。在Java中創建一個唯一的5位數字隨機數組的數組?

for(int i = 0; i < myArr.length; i++) { 
    int id = (int) (Math.round(Math.random() * 89999) + 10000); 
    idArr.add(id); 
} 

我試圖找出我怎麼能檢查,看看數量已經在陣列中添加它之前,但我不能讓我的身邊最好的辦法頭做到這一點。

回答

3

不要使用(陣列)列表,使用Set

Set<Integer> set = ...; 
while (set.size() < myArr.length) { 
    set.add(yourRandomNumber); 
} 
+0

次要點評:OP被要求「獨特的5位數字」,而不是「5個唯一的數字」。數字'5'應該有'myArr.length'。 – 2013-02-12 11:27:18

+0

固定myArr.length – 2013-02-12 12:12:47

+0

謝謝nd。我會放棄這一點 – fxfuture 2013-02-13 00:09:33

1

可以創建數的Set。例如:

Set<Integer> intSet = new HashSet<Integer>(); 
while(intSet.size() < myArr.length) { 
    intSet.add(getNextRandomInt()); 
} 

然後喲可以做任何事情與Set

所以,如果你需要一個數組,只要致電:

Integer[] intArray = intSet.toArray(new Integer[myArr.length]); 

,或者,如果你需要一個ArrayListint[]陣列:

// ArrayList: 
List<Integer> ints = new ArrayList<Integer>(); 
ints.addAll(intSet); 

// int[] array: 
int[] intArray = new int[myArr.length]; 
for(int i = 0; i<intArray.length; ++i) { 
    intArray[i] = int.get(i); 
} 
0

任何有涉及循環,直到你找到足夠的唯一的隨機數字永遠不會保證完成。如果極不可能,這是可能的,即隨機數生成器在合理的時間內永遠不會輸出足夠的唯一數字。

(我知道這永遠不會在實踐中發生,但它是一個理論可能性。)

一個安全的選擇是選擇一個隨機數,然後增加它在一個循環,直到你有足夠的數字。

int n = new Random().nextInt(89999 - myArr.length) + 10000; 
for (int i = 0; i < myArr.length; i++) { 
    idArr.add(n++); 
}