#生成随机不重复数的有关问题

####生成随机不重复数的问题
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 的话 不就重复了,但测试一千万次居然都没重复的,不明白

------解决方案--------------------
引用:
什么叫最多有num[r]和num[n-1]是重复?
这是一次运行中的结果,*前面的是r值,后面的是num数组,重复的多了去了
======1****[1, 10, 3, 4, 5, 6, 7, 8, 9, 10]
======3****[1, 10, 3, 9, 5, 6, 7, 8, 9, 10]
======3****[1, 10, 3, 8, 5, 6, 7, 8, 9, 10]
======0****[7, 10, 3, 8, 5, 6, 7, 8, 9, 10]
======3****[7, 10, 3, 6, 5, 6, 7, 8, 9, 10]
======3****[7, 10, 3, 5, 5, 6, 7, 8, 9, 10]
======1****[7, 5, 3, 5, 5, 6, 7, 8, 9, 10]
======2****[7, 5, 3, 5, 5, 6, 7, 8, 9, 10]
======0****[5, 5, 3, 5, 5, 6, 7, 8, 9, 10]
======0****[5, 5, 3, 5, 5, 6, 7, 8, 9, 10]

不知我是不是把问题看错了 ,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++)