1. 程式人生 > >Java產生不重複隨機數方法

Java產生不重複隨機數方法

關於生成Java不重複的隨機數:

  1. import java.util.*;  
  2. publicclass Test...{  
  3. publicstaticvoid main(String[] args)...{  
  4. //生成 [0-n) 個不重複的隨機數
  5.         / st 用來儲存這些隨機數  
  6.         ArrayList list = new ArrayList();  
  7. int n = 10;  
  8.         Random rand = new Random();  
  9. boolean[] bool = newboolean[n];  
  10. int num =0;  
  11. for (int i = 0; i<n; i++)...{  
  12. do...{  
  13. //如果產生的數相同繼續迴圈
  14.                 num = rand.nextInt(n);      
  15.             }while(bool[num]);  
  16.             bool[num] =true;  
  17.             list.add(num);  
  18.         }  
  19.         System.out.println (list);      
  20. }          
  21. publicclass Test  
  22. {  
  23. publicstaticvoid main(String[] args)  
  24.     {  
  25. int[] arr = newint
    [10];  
  26. for (int i = 0; i < 10; i++)  
  27.         {  
  28.             arr[i] = (int) (Math.random() * 40) + 1;  
  29. for (int j = 0; j < i; j++)  
  30.             {  
  31. if (arr[j] == arr[i])  
  32.                 {  
  33.                     i--;  
  34. break;  
  35.                 }  
  36.             }  
  37.         }  
  38. for (int i = 0; i < 10; i++)  
  39.             System.out.print(arr[i] + 
    " ");  
  40.     }  
  41. }  
  42. b.  
  43. Java code  
  44. import   java.util.*;   
  45. publicclass   Test   
  46. {   
  47. publicstaticvoid   main(String[]   args)   
  48.         {   
  49. int   n=40;   
  50. int[]   num   =   newint[n];   
  51. for(int   i=0;i <num.length;i++)   
  52.                         num[i]   =   i+1;   
  53. int[]   arr   =   newint[10];   
  54. for(int   i=0;i <arr.length;i++)   
  55.                 {   
  56. int   r   =(int)(Math.random()*n);   
  57.                         arr[i]=num[r];   
  58.                         num[r]=num[n-1];   
  59.                         n--;   
  60.                 }   
  61. for(int   i=0;i <arr.length;i++)   
  62.                         System.out.print(arr[i]+"   ");   
  63.         }   
  64. }  
  65. c.  
  66. Java code  
  67. import   java.util.*;   
  68. publicclass   Test   
  69. {   
  70. publicstaticvoid   main(String[]   args)   
  71.         {   
  72.                 LinkedList <Integer>   myList=   new   LinkedList <Integer> ();   
  73. int   n=40;   
  74. for(int   i=0;i <n;i++)   
  75.                         myList.add(i+1);   
  76. int[]   arr   =   newint[10];   
  77. for(int   i=0;i <arr.length;i++)   
  78.                 {   
  79.                         arr[i]=myList.remove((int)(Math.random()*n));   
  80.                         n--;   
  81.                 }   
  82. for(int   i=0;i <arr.length;i++)   
  83.                 {   
  84.                         System.out.print(arr[i]+"   ");   
  85.                 }   
  86.         }   
  87. }  
  88. d.  
  89. Java code  
  90. import   java.util.*;   
  91. publicclass   Test   
  92. {   
  93. publicstaticvoid   main(String[]   args)   
  94.         {   
  95.                 Set <Integer>   mySet   =   new   LinkedHashSet <Integer> ();   
  96. while(mySet.size() <10)   
  97.                 {   
  98.                         mySet.add((int)(Math.random()*40+1));   
  99.                 }   
  100. for(Integer   i:mySet)   
  101.                 {   
  102.                         System.out.print(i+"   ");   
  103.                 }   
  104.         }   
  105. }  


方法一:
在一個待選陣列中隨機產生一個數,然後把他放到待選陣列的最後,然後從length-1裡隨機產生下一個隨機數,如此類推

  1. publicstaticint[] randoms()  
  2. {  
  3. Random r = new Random();  
  4. int temp1,temp2;  
  5. int send[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};  
  6. int len = send.length;  
  7. int returnValue[] = newint[22];  
  8. for(int i=0;i<22;i++)  
  9. {  
  10. temp1 = Math.abs(r.nextInt())% len;  
  11. returnValue[i] = send[temp1];  
  12. temp2 = send[temp1];  
  13. send[temp1] = send[len-1];  
  14. send[len-1] = temp2;  
  15. len--;  
  16. }  
  17. return returnValue;  
  18. }  

方法二:
還是一個固定的無重複的陣列,然後把這個陣列隨機調換位置,多次之後這個陣列就是一個無重複的隨機陣列了。

  1. publicstaticint[] random2()  
  2. {  
  3. int send[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};  
  4. int temp1,temp2,temp3;  
  5.    Random r = new Random();  
  6. for(int i=0;i<send.length;i++) //隨機交換send.length次
  7.    {  
  8.     temp1 = Math.abs(r.nextInt())%(send.length-1); //隨機產生一個位置
  9.     temp2 = Math.abs(r.nextInt())%(send.length-1); //隨機產生另一個位置
  10. if(temp1 != temp2)  
  11.     {  
  12.      temp3 = send[temp1];  
  13.      send[temp1] = send[temp2];  
  14.      send[temp2] = temp3;  
  15.     }  
  16.    }  
  17. return send;  
  18. }