Java產(chǎn)生不重復隨機數(shù)方法
作者:孫豐偉
本文講述了Java生成不重復隨機數(shù)的兩種方法,并給出了其實現(xiàn)的相應的代碼。
關于生成Java不重復的隨機數(shù):
- import java.util.*;
- public class Test...{
- public static void main(String[] args)...{
- //生成 [0-n) 個不重復的隨機數(shù)
- / st 用來保存這些隨機數(shù)
- ArrayList list = new ArrayList();
- int n = 10;
- Random rand = new Random();
- boolean[] bool = new boolean[n];
- int num =0;
- for (int i = 0; i<n; i++)...{
- do...{
- //如果產(chǎn)生的數(shù)相同繼續(xù)循環(huán)
- num = rand.nextInt(n);
- }while(bool[num]);
- bool[num] =true;
- list.add(num);
- }
- System.out.println (list);
- }
- public class Test
- {
- public static void main(String[] args)
- {
- int[] arr = new int[10];
- for (int i = 0; i < 10; i++)
- {
- arr[i] = (int) (Math.random() * 40) + 1;
- for (int j = 0; j < i; j++)
- {
- if (arr[j] == arr[i])
- {
- i--;
- break;
- }
- }
- }
- for (int i = 0; i < 10; i++)
- System.out.print(arr[i] + " ");
- }
- }
- b.
- Java code
- import java.util.*;
- public class Test
- {
- public static void main(String[] args)
- {
- int n=40;
- 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]+" ");
- }
- }
- c.
- Java code
- import java.util.*;
- public class Test
- {
- public static void main(String[] args)
- {
- LinkedList <Integer> myList= new LinkedList <Integer> ();
- int n=40;
- for(int i=0;i <n;i++)
- myList.add(i+1);
- int[] arr = new int[10];
- for(int i=0;i <arr.length;i++)
- {
- arr[i]=myList.remove((int)(Math.random()*n));
- n--;
- }
- for(int i=0;i <arr.length;i++)
- {
- System.out.print(arr[i]+" ");
- }
- }
- }
- d.
- Java code
- import java.util.*;
- public class Test
- {
- public static void main(String[] args)
- {
- Set <Integer> mySet = new LinkedHashSet <Integer> ();
- while(mySet.size() <10)
- {
- mySet.add((int)(Math.random()*40+1));
- }
- for(Integer i:mySet)
- {
- System.out.print(i+" ");
- }
- }
- }
方法一:
在一個待選數(shù)組中隨機產(chǎn)生一個數(shù),然后把他放到待選數(shù)組的最后,然后從length-1里隨機產(chǎn)生下一個隨機數(shù),如此類推
- public static int[] randoms()
- {
- Random r = new Random();
- int temp1,temp2;
- int send[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};
- int len = send.length;
- int returnValue[] = new int[22];
- for(int i=0;i<22;i++)
- {
- temp1 = Math.abs(r.nextInt())% len;
- returnValue[i] = send[temp1];
- temp2 = send[temp1];
- send[temp1] = send[len-1];
- send[len-1] = temp2;
- len--;
- }
- return returnValue;
- }
- }
方法二:
還是一個固定的無重復的數(shù)組,然后把這個數(shù)組隨機調換位置,多次之后這個數(shù)組就是一個無重復的隨機數(shù)組了。
- public static int[] random2()
- {
- int send[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21};
- int temp1,temp2,temp3;
- Random r = new Random();
- for(int i=0;i<send.length;i++) //隨機交換send.length次
- {
- temp1 = Math.abs(r.nextInt())%(send.length-1); //隨機產(chǎn)生一個位置
- temp2 = Math.abs(r.nextInt())%(send.length-1); //隨機產(chǎn)生另一個位置
- if(temp1 != temp2)
- {
- temp3 = send[temp1];
- send[temp1] = send[temp2];
- send[temp2] = temp3;
- }
- }
- return send;
- }
【編輯推薦】
- 20個開發(fā)人員非常有用的Java功能代碼
- 走進Java 7中的模塊系統(tǒng)
- JavaFX 1.2 已經(jīng)發(fā)布 主要新功能一覽
- 2009年十大Java技術解決方案
- 2008最值得學習的五種JAVA技術
責任編輯:仲衡
來源:
百度博客