Java产生不重复随机数方法

开发 后端
本文讲述了Java生成不重复随机数的两种方法,并给出了其实现的相应的代码。

关于生成Java不重复的随机数:

  1. import java.util.*;  
  2. public class Test...{  
  3.     public static void main(String[] args)...{  
  4.         //生成 [0-n) 个不重复的随机数  
  5.         / st 用来保存这些随机数  
  6.         ArrayList list = new ArrayList();  
  7.           
  8.           
  9.         int n = 10;  
  10.         Random rand = new Random();  
  11.         boolean[] bool = new boolean[n];  
  12.           
  13.         int num =0;  
  14.           
  15.         for (int i = 0; i<n; i++)...{  
  16.               
  17.       
  18.             do...{  
  19.                 //如果产生的数相同继续循环  
  20.                 num = rand.nextInt(n);      
  21.                
  22.             }while(bool[num]);  
  23.               
  24.             bool[num] =true;  
  25.               
  26.             list.add(num);  
  27.           
  28.           
  29.         }  
  30.               
  31.       
  32.         System.out.println (list);      
  33. }          
  34.           
  35.  
  36.  
  37. public class Test  
  38. {  
  39.  
  40.     public static void main(String[] args)  
  41.     {  
  42.         int[] arr = new int[10];  
  43.  
  44.         for (int i = 0; i < 10; i++)  
  45.         {  
  46.             arr[i] = (int) (Math.random() * 40) + 1;  
  47.             for (int j = 0; j < i; j++)  
  48.             {  
  49.                 if (arr[j] == arr[i])  
  50.                 {  
  51.                     i--;  
  52.                     break;  
  53.                 }  
  54.             }  
  55.         }  
  56.         for (int i = 0; i < 10; i++)  
  57.             System.out.print(arr[i] + " ");  
  58.     }  
  59. }  
  60.  
  61.  
  62. b.  
  63.  
  64. Java code  
  65.  
  66.  
  67. import   java.util.*;   
  68. public   class   Test   
  69. {   
  70.           
  71.         public   static   void   main(String[]   args)   
  72.         {   
  73.                 int   n=40;   
  74.                 int[]   num   =   new   int[n];   
  75.                 for(int   i=0;i <num.length;i++)   
  76.                         num[i]   =   i+1;   
  77.                 int[]   arr   =   new   int[10];   
  78.                 for(int   i=0;i <arr.length;i++)   
  79.                 {   
  80.                         int   r   =(int)(Math.random()*n);   
  81.                         arr[i]=num[r];   
  82.                         num[r]=num[n-1];   
  83.                         n--;   
  84.                 }   
  85.                 for(int   i=0;i <arr.length;i++)   
  86.                         System.out.print(arr[i]+"   ");   
  87.         }   
  88. }  
  89.  
  90.  
  91.  
  92. c.  
  93.  
  94. Java code  
  95.  
  96.  
  97. import   java.util.*;   
  98. public   class   Test   
  99. {   
  100.           
  101.         public   static   void   main(String[]   args)   
  102.         {   
  103.                 LinkedList <Integer>   myList=   new   LinkedList <Integer> ();   
  104.                 int   n=40;   
  105.                 for(int   i=0;i <n;i++)   
  106.                         myList.add(i+1);   
  107.                 int[]   arr   =   new   int[10];   
  108.                 for(int   i=0;i <arr.length;i++)   
  109.                 {   
  110.                         arr[i]=myList.remove((int)(Math.random()*n));   
  111.                         n--;   
  112.                 }   
  113.                 for(int   i=0;i <arr.length;i++)   
  114.                 {   
  115.                         System.out.print(arr[i]+"   ");   
  116.                 }   
  117.         }   
  118. }  
  119.  
  120.  
  121.  
  122. d.  
  123.  
  124. Java code  
  125.  
  126.  
  127. import   java.util.*;   
  128. public   class   Test   
  129. {   
  130.           
  131.         public   static   void   main(String[]   args)   
  132.         {   
  133.                 Set <Integer>   mySet   =   new   LinkedHashSet <Integer> ();   
  134.                 while(mySet.size() <10)   
  135.                 {   
  136.                         mySet.add((int)(Math.random()*40+1));   
  137.                 }   
  138.                 for(Integer   i:mySet)   
  139.                 {   
  140.                         System.out.print(i+"   ");   
  141.                 }   
  142.         }   
  143. }  
  144.  


方法一:
在一个待选数组中随机产生一个数,然后把他放到待选数组的最后,然后从length-1里随机产生下一个随机数,如此类推

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

方法二:
还是一个固定的无重复的数组,然后把这个数组随机调换位置,多次之后这个数组就是一个无重复的随机数组了。

  1. public static int[] 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. }  
  19.  


 

【编辑推荐】

  1. 20个开发人员非常有用的Java功能代码
  2. 走进Java 7中的模块系统
  3. JavaFX 1.2 已经发布 主要新功能一览
  4. 2009年十大Java技术解决方案
  5. 2008最值得学习的五种JAVA技术

 

责任编辑:仲衡 来源: 百度博客
相关推荐

2011-03-28 14:57:58

不重复随机数列生成

2010-02-01 17:02:53

C++产生随机数

2009-06-17 17:37:43

Java随机数

2010-07-15 13:34:32

Perl随机数

2009-07-06 15:11:18

Java 随机数

2011-07-08 15:11:03

JAVA

2019-09-11 10:09:00

Java虚拟机算法

2010-10-25 16:29:45

Oracle随机数产生

2011-05-24 17:08:57

rand()srand()

2023-01-03 07:49:45

Java随机数线程

2010-10-09 15:35:25

MySQL rand函

2012-03-22 09:31:14

Java

2011-07-08 10:32:11

Objective-C 随机数

2009-12-08 11:44:14

PHP获取随机数

2010-09-06 17:40:59

SQL函数

2021-12-27 09:31:20

HashtableJava随机数

2009-12-02 17:01:01

PHP随机数rand()

2015-10-13 10:00:58

Swift随机数使用总结

2009-12-08 12:58:33

PHP随机数类

2021-06-01 22:31:57

区块链随机数技术
点赞
收藏

51CTO技术栈公众号