#生成随机不重复数的有关问题
####生成随机不重复数的问题
public class Test
{
public static void main(String[] args)
{
int n=10;
int[] num = new int[n];
for(int i=0;i <num.length;i++)
num[i] = i+1;
int[] arr = new int[10];
for(int i=0;i <arr.length;i++)
{
int r =(int)(Math.random()*n);
arr[i]=num[r];
num[r]=num[n-1];
n--;
}
for(int i=0;i <arr.length;i++)
System.out.print(arr[i]+" ");
}
}
它为什么能够生成不重复的,有点搞不明白,若前3次r是9,9,0 的话 不就重复了,但测试一千万次居然都没重复的,不明白
------解决方案--------------------
不知我是不是把问题看错了 ,arr才是最终数组吧(不是问它为什么不重复吗),num[r]和num[n-1]重复,就是说 当你r=1的时候num数组中num[r]和num[n-1]值相等
------解决方案--------------------
------解决方案--------------------
public class Test
{
public static void main(String[] args)
{
int n=10;
int[] num = new int[n];
for(int i=0;i <num.length;i++)
num[i] = i+1;
int[] arr = new int[10];
for(int i=0;i <arr.length;i++)
{
int r =(int)(Math.random()*n);
arr[i]=num[r];
num[r]=num[n-1];
n--;
}
for(int i=0;i <arr.length;i++)
System.out.print(arr[i]+" ");
}
}
它为什么能够生成不重复的,有点搞不明白,若前3次r是9,9,0 的话 不就重复了,但测试一千万次居然都没重复的,不明白
------解决方案--------------------
不知我是不是把问题看错了 ,arr才是最终数组吧(不是问它为什么不重复吗),num[r]和num[n-1]重复,就是说 当你r=1的时候num数组中num[r]和num[n-1]值相等
------解决方案--------------------
后面的代码还在分析
// Math.radom 值范围 [0 , 1),随着n的递减,r值范围也会减小不会出现r 为 9,9 的情况
// 第一次 r 范围0-9
// 第二次 r 范围0-8
// ...
// 第九次r 范围 0-1
// 第十次 r 范围 0-0 即 0
int r =(int)(Math.random()*n);
------解决方案--------------------
for(int i=0;i <arr.length;i++)