我想从一个区间生成随机唯一的int数,但应用程序冻结(无限循环)。
int[] ids = new int[200];
for(int i = 0; i < ids.length; i++){
int temp = getUnique(ids);
ids[i] = temp;
}
private int getUnique(int[] ids){
while(true){
int iRand = random(0, ids.length);
if( unique( ids, iRand ) ) return iRand;
}
}
private boolean unique(int[] arr, int i){
for(int k : arr){
if(k == i) return false;
}
return true;
}
private int random(int Min, int Max){
return Min + (int)(Math.random() * ((Max - Min) + 1));
}
我想要一个0到200之间随机排序的整数数组。我不知道为什么,但应用程序正在冻结。为什么?问题在哪里?
答案 0 :(得分:6)
Collections.shuffle(...)
随机化列表。例如:
Integer[] ids = getArrayOfNumbers();
List<Integer> idList = Arrays.asList(ids);
Collections.shuffle(idList);
ids = idList.toArray(ids);
答案 1 :(得分:1)
我建议你将你想要的数字插入到那个数组中,然后将它们混洗,因为生成一个随机数然后检查它是否是唯一的可能需要很长时间..