黑马程序员技术交流社区

标题: 两种生成不重复随机数列的方法,你造吗? [打印本页]

作者: 仲德明    时间: 2015-6-7 22:20
标题: 两种生成不重复随机数列的方法,你造吗?
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));

        }

}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2