2013-02-12 93 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++); 
}