最初的两个for循环嵌套,使用i--进行回退导致0位置没有值需要提前赋值
int[] ids = new int[100];
Random r = new Random();
ids[0] = r.nextInt(199) + 1;
for (int i = 1; i < ids.length; i++) {
int id = r.nextInt(199) + 1;
boolean flag = false;
for (int j = 0; j < i; j++) {
if (id == ids[j]){
i--;
flag = true;
break;
}
}
if (flag == false){
ids[i] = id;
}
}
do-while的做法,在do-while语句中处理了重复问题,如果unique为false,继续为id取随机数,直到不重复,且不需要提前赋值
int[] ids = new int[100];
Random r = new Random();
for (int i = 0; i < ids.length; i++) {
int id;
boolean unique;
do{
id = r.nextInt(199) + 1;
unique = true;
for (int j = 0; j < i; j++) {
if (id == ids[j]){
unique = false;
break;
}
}
}while(!unique);
ids[i] = id;
}
先用列表取储存1~200的数,使用shuffle方法打乱,stream流取int类型的数组,mapToInt方法取到整型;或截取列表前100转为Integer类型数组,toArray()的形参是泛型数组,不能用new int[]。
List<Integer> numbers = new ArrayList<>(200);
for (int i = 1; i <= 200; i++) {
numbers.add(i);
}
Collections.shuffle(numbers);
int[] idst = numbers.stream().limit(100).mapToInt(Integer::intValue).toArray();//stream流
Integer[] ids = numbers.subList(0, 100).toArray(new Integer[100]);