zoukankan      html  css  js  c++  java
  • 集合之列表:生成不重复的随机数

      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 
  • 相关阅读:
    Windows Phone本地数据库(SQLCE):3、[table]attribute(翻译) (转)
    深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)
    深入理解 Getter和Setter 对对象的属性监听
    深入理解Proxy 及 使用Proxy实现vue数据双向绑定
    深入理解 ES6中的 Reflect
    深入理解 Object.defineProperty 及实现数据双向绑定
    Egg入门学习(三)---理解中间件作用
    学习使用PM2管理nodejs进程
    Egg入门学习(二)---理解service作用
    Egg入门学习(一)
  • 原文地址:https://www.cnblogs.com/celine/p/8455921.html
Copyright © 2011-2022 走看看