1. 程式人生 > >集合之列表:生成不重復的隨機數

集合之列表:生成不重復的隨機數

c中 元素 con move 目標 == mini add 生成隨機數

  1 package com.jdk7.chapter4;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 import java.util.Random;
  6 
  7 /**
  8  * 指定範圍類生成一組指定個數的隨機數
  9  * 
 10  * @author Administrator
 11  *
 12  */
 13 public class UnRepeatRandomNumber {
 14     private int min;
 15     private int max;
16 17 public UnRepeatRandomNumber(){ 18 this.min = 0; 19 this.max = 10; 20 } 21 22 public UnRepeatRandomNumber(int min, int max){ 23 if(max>=min){ 24 this.min = min; 25 this.max = max; 26 } 27 } 28 29
/** 30 * 返回一組隨機數,以Integer[]類型返回,如果數組中已存在生成的隨機數,則丟棄,重新生成隨機數 31 * @param length 32 * @return 33 */ 34 public Integer[] getMethodA(int length){ 35 if(length<=0){ 36 System.out.println("生成隨機數的個數不能小於1"); 37 return new Integer[0]; 38 }else
if(length>(max-min+1)){ 39 System.out.println("生成隨機數的個數不能超出取值範圍總個數!"); 40 length = (max-min+1); 41 } 42 Random random = new Random(); 43 List list = new ArrayList(); 44 //因為不知道具體要循環多少次,所以只能用while的判斷條件來進行循環 45 while((list.size())<length){ 46 int number = min+random.nextInt(max-min+1); 47 if(!list.contains(number)){ 48 list.add(number); 49 } 50 } 51 return (Integer[])list.toArray(new Integer[2]); 52 } 53 54 /** 55 * 按照生成隨機數的範圍,將所有可能生成的隨機數存放在源數組 56 * 循環體中進行如下操作: 57 * 隨機生成源數組的下標number 58 * 獲取源數組下標number對應的值依次存放入目標數組中 59 * 源數組中移除存入目標數組的隨機數 60 * 直到目標數組長度達到預期值 61 * @param length 62 * @return 63 */ 64 public Integer[] getMethodB(int length){ 65 if(length<=0){ 66 System.out.println("隨機數數組長度不能小於零!"); 67 return new Integer[0]; 68 }else if(length>(this.max-this.min+1)){ 69 System.out.println("生成隨機數的個數不能超出取值範圍總個數!"); 70 length = this.max-this.min+1; 71 } 72 //將所有可能生成的隨機數存放在src中 73 List src = new ArrayList(); 74 for(int i=min;i<(max+1);i++){ 75 src.add(i); 76 } 77 Random random = new Random(); 78 //存放需要的目標隨機數組 79 List result = new ArrayList(); 80 //因為這裏是先比較大小,再進行添加,循環次數是從0到length-1,達到了數組要求的長度 81 //如果是先添加數組元素再比較,那麽如果希望循環length次的話,判斷條件需改為(result.size())<=length 82 while((result.size())<length){ 83 int number = random.nextInt(src.size()); 84 //從待生成數組中獲取對應下標的元素,依次存入目標數組中 85 result.add(src.get(number)); 86 src.remove(number); 87 } 88 return (Integer[])result.toArray(new Integer[0]); 89 } 90 91 public void printInteger(Integer[] integer){ 92 if(integer==null){ 93 System.out.println("數組為空!"); 94 }else if(integer.length<=0){ 95 System.out.println("數組長度小於零!"); 96 } 97 for(int i=0;i<integer.length;i++){ 98 System.out.print(integer[i]+" "); 99 } 100 System.out.println(); 101 } 102 103 }
 1 package com.jdk7.chapter4;
 2 
 3 public class UnRepeatRandomNumberTest {
 4     public static void main(String[] args) {
 5 //        UnRepeatRandomNumber ranumber = new UnRepeatRandomNumber();
 6         UnRepeatRandomNumber ranumber = new UnRepeatRandomNumber(2,12);
 7         
 8         ranumber.printInteger(ranumber.getMethodA(12));
 9         ranumber.printInteger(ranumber.getMethodA(0));
10         ranumber.printInteger(ranumber.getMethodA(11));
11         
12         ranumber.printInteger(ranumber.getMethodB(12));
13         ranumber.printInteger(ranumber.getMethodB(-1));
14         ranumber.printInteger(ranumber.getMethodB(11));
15     }
16 }
17 
18 執行結果:
19 生成隨機數的個數不能超出取值範圍總個數!
20 8 12 10 3 5 4 11 6 9 2 7 
21 生成隨機數的個數不能小於1
22 數組長度小於零!
23 
24 10 12 7 3 6 4 5 11 2 8 9 
25 生成隨機數的個數不能超出取值範圍總個數!
26 5 3 12 10 6 8 7 9 2 4 11 
27 隨機數數組長度不能小於零!
28 數組長度小於零!
29 
30 11 2 9 7 3 8 12 10 6 4 5 

集合之列表:生成不重復的隨機數