A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class UnrepeatRandomNumber {
       
        /**
         * 使用Random类生成的随机数序列有元素的重复,可以采用以下两种方法生成不重复的随机数序列
         *                 1,排除法:利用Random随机生成数字,如果新生成的数字在以前没有出现过,则放入结果队列,否则继续生成下一个随机数
         *                 2,将所有可能生成的数字放到一个候选列表中,然后生成随机数K,作为下标,将候选列表中下标为K的数字放到结果列表中,
         *                         同时把它从候选列表中删除,继续生成下一个随机数作为下标,因为被选中的数字都不在候选队列中,
         *                         所以可以保证每次取得的随机数都是不相同的
         * */
        private int min;
        private int max;
        public  UnrepeatRandomNumber(){
                this.min = 0;
                this.max = 0;
        }
        public UnrepeatRandomNumber(int min,int max){
                this();
                if(max>min){
                        this.min = min;
                        this.max = max;
                }else{
                        System.out.println("max比min小,按默认值生成UnrepeatRandomNumber对象!");
                }
        }
        public Integer[] getRandomMethodA(int length){
                if(length<=0){
                        return new Integer[0];
                }
                else if(length>(this.max-this.min)){
                        System.out.println("结果列表长度不能达到:"+length+",结果长度只能是:"+(this.max-this.min));
                        length = this.max   - this.max;
                }
                Random rd = new Random();
                List resultList = new ArrayList();
                while(resultList.size()<length){
                        Integer random = new Integer(this.min+rd.nextInt(this.max-this.min+1));
                        if(!resultList.contains(random)){
                                resultList.add(random);
                        }
                }
                return (Integer[])resultList.toArray(new Integer[0]);
        }
        public static void print(Integer [] n){
                for(int i = 0;i<n.length;i++){
                        System.out.print(n[i]+"  ");
                }
        }

        public static void main(String[] args) {
                UnrepeatRandomNumber test = new UnrepeatRandomNumber(5,15);
                print(test.getRandomMethodA(8));

        }

}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马