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


      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 Server 2012 R2 里面如何安装Net Framework 3.5
    虚拟机网络驱动(共享文件夹)不见了的解决方案-适用于win7~win10 and Windows Server 2008~Windows Server 2012R2
    在计算机 . 上没有找到服务 WAS
    免费获取WP之类的开发者权限或免费使用Azure 2015-10-19
    颠覆你的认知,带你领略史上最为齐全的微软黑科技之旅
    【技巧】只利用 Visual Stdio 自带的工具这么找父类?
    网站定位之---根据IP获得区域
    06.移动先行之谁主沉浮----我的代码我来写(Xaml的优势)
    05.移动先行之谁主沉浮----小应用的美化
    04.移动先行之谁主沉浮----XAML的探索
  • 原文地址:https://www.cnblogs.com/celine/p/8455921.html
Copyright © 2020-2023  润新知