面试过程中碰到一个问题
从30里面随机7个数字最优写法
最开始想法 就是
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
for(int i=0;i<7;i++){
while(true){
int a = new Random().nextInt(30)+1;
if(set.contains(a)){
continue;
}
set.add(a);
break;
}
}
ArrayList<Integer> list = new ArrayList<Integer>(set);
Collections.sort(list);
System.out.println(list);
}
后来面试官说 既然是随机的 那么在while true哪里就有可能死循环,出不来,没有什么可能或者不可能
我当时想了半天,只能说一些 加次数什么的,让我想别的办法也没有想出来
后来无意间想到一个办法 ,就不可能出现这种死循环的情况
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<30;i++){
list.add(i+1);
}
int[] arr = new int[7];
for(int i=0;i<arr.length;i++){
int m = list.get(new Random().nextInt(list.size()));
arr[i] = m;
list.remove(new Integer(m));
}
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
欢迎大家提出新的想法和思路