Random的nextInt(int n)方法,返回一个0-n的随机数,不包括n,
那么用nextInt(52)只能产生一个0-51(包括51)的随机数,
理论上你要产生52个这个区间的不重复的随机数是没问题的,那就必须肯定是0-51,卡的死死的,
可是你要把产生的随机数放到一个new Int[52] 数组中就有问题了,当你创建数组是,默认值是52个0;
所以你要把0-51经验证是否重复后,放进数组中,0是放不进去的,所以会产生死循环
你可以nextInt(53)试试,再打印出数组中的结果看看,里面一定不会有0
至于更好的方法嘛,如果你学到集合后,就会知道Set集合的特点就是不允许重复的数据,
用Set存储产生的随机数,就不用验证是否重复啦,只要Set的size是52了,break就行了
代码如下:
import java.util.*;
import java.util.*;
//1.产生52个0-52之间的随机数,不能重复!
public class RandomNumber{
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
while (true) {
if (set.size() == 52) {
break;
}
int num = new Random().nextInt(52);
set.add(num);
}
Iterator<Integer> it = set.iterator();
while (it.hasNext()) {
System.out.print(it.next() + " ");
}
}
} |