码迷,mamicode.com
首页 > 其他好文 > 详细

集合之列表:生成不重复的随机数

时间:2018-02-20 22:53:20      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:超出   bsp   条件   arraylist   random   res   随机   gpo   max   

  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 

 

集合之列表:生成不重复的随机数

标签:超出   bsp   条件   arraylist   random   res   随机   gpo   max   

原文地址:https://www.cnblogs.com/celine/p/8455921.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!