Java產生不重複隨機數方法
阿新 • • 發佈:2019-02-02
關於生成Java不重複的隨機數:
- import java.util.*;
- publicclass Test...{
- publicstaticvoid main(String[] args)...{
- //生成 [0-n) 個不重複的隨機數
- / st 用來儲存這些隨機數
- ArrayList list = new ArrayList();
- int n = 10;
- Random rand = new Random();
- boolean[] bool = newboolean[n];
- int num =0;
- for (int i = 0; i<n; i++)...{
- do...{
- //如果產生的數相同繼續迴圈
- num = rand.nextInt(n);
- }while(bool[num]);
- bool[num] =true;
- list.add(num);
- }
- System.out.println (list);
- }
- publicclass Test
- {
- publicstaticvoid main(String[] args)
- {
- int[] arr = newint
- 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.*;
- publicclass Test
- {
- publicstaticvoid main(String[] args)
- {
- int n=40;
- int[] num = newint[n];
- for(int i=0;i <num.length;i++)
- num[i] = i+1;
- int[] arr = newint[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.*;
- publicclass Test
- {
- publicstaticvoid 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 = newint[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.*;
- publicclass Test
- {
- publicstaticvoid 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+" ");
- }
- }
- }
方法一:
在一個待選陣列中隨機產生一個數,然後把他放到待選陣列的最後,然後從length-1裡隨機產生下一個隨機數,如此類推
- publicstaticint[] 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[] = newint[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;
- }
- }
方法二:
還是一個固定的無重複的陣列,然後把這個陣列隨機調換位置,多次之後這個陣列就是一個無重複的隨機陣列了。
- publicstaticint[] 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); //隨機產生一個位置
- temp2 = Math.abs(r.nextInt())%(send.length-1); //隨機產生另一個位置
- if(temp1 != temp2)
- {
- temp3 = send[temp1];
- send[temp1] = send[temp2];
- send[temp2] = temp3;
- }
- }
- return send;
- }