我要产生一个1-52之间的不重复的随机数,怎么处理

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【adrain_sengtang】截止到2008-07-11 10:31:12的历史汇总数据(不包括此帖):
    发帖的总数量:6                        发帖的总分数:180                      每贴平均分数:30                       
    回帖的总数量:10                       得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:6                        结贴的总分数:180                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:16.67 %               无满意结分率:11.11 %                  
    敬礼!
      

  2.   

    得到的每个随即数都+1后者放到一个Set集合中
      

  3.   

    什么意思啊?产生1个?
    Random r=new Random();
    int n=1+r.nextInt(52);
    这个就是你要的吧。
      

  4.   

    最简单的办法int a = new int[52];
    Random r = new Random();
    for(int i=0;i<52;i++){
        a[i] = i;
    }
    for(int i=0;i<52;i++){
        int s1 = r.nextInt();
        int s2 = r.nextInt();
        if(s1 != s2){
           int t = a[s1];
           a[s1] = a[s2];
           a[s2] = t;
        }
    }
      

  5.   

    import java.util.Arrays;
    import java.util.Random;/**
     * <code>RandomUtil</code> - Random Tool Class.
     * @author SageZk
     * @version 1.0
     */
    public class RandomUtil {    private RandomUtil() {}    private static Random rnd = null;    /**
         * 初始化随机数发生器。
         */
        private static void initRnd() {
            if (rnd == null) rnd = new Random();
        }    /**
         * 计算并返回无重复值的以 <code>min</code> 为下限 <code>max</code> 为上限的随机整数数组。
         * @param min 随机整数下限(包含)
         * @param max 随机整数上限(包含)
         * @param len 结果数组长度
         * @return 结果数组
         */
        public static int[] getLotteryArray(int min, int max, int len) {
            //参数校验及性能优化
            if (len < 0) return null;  //长度小于 0 的数组不存在
            if (len == 0) return new int[0];  //返回长度为 0 的数组
            if (min > max) {  //校正参数 min max
                int t = min;
                min = max;
                max = t;
            }
            final int LEN = max - min + 1;  //种子个数
            if (len > LEN) return null;  //如果出现 35 选 36 的情况就返回 null
            //计算无重复值随机数组
            initRnd();  //初始化随机数发生器
            int[] seed = new int[LEN];  //种子数组
            for (int i = 0, n = min; i < LEN;) seed[i++] = n++;  //初始化种子数组
            for (int i = 0, j = 0, t = 0; i < len; ++i) {
                j = rnd.nextInt(LEN - i) + i;
                t = seed[i];
                seed[i] = seed[j];
                seed[j] = t;
            }
            return Arrays.copyOf(seed, len);  //注意:copyOf 需要 JRE1.6
        }    //Unit Testing
        public static void main(String[] args) {
            final int N = 10000;  //测试次数
            for (int i = 0; i < N; ++i) {
                int[] la = RandomUtil.getLotteryArray(1, 35, 7);
                if (la == null) continue;
                for (int v : la) System.out.printf("%0$02d ", v);
                System.out.println();
            }
        }}
      

  6.   

    类HashSet一个不包含重复元素的 collection。更正式地说,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。使用它的add(E o)就可以了
      

  7.   

    我写了一个笨办法.
    package houlei.random;import java.util.NoSuchElementException;
    import java.util.TreeSet;public class Random {
    private int start,end;
    private TreeSet buff=new TreeSet();
    private java.util.Random rand = new java.util.Random();
    /**
     * 可以产生一个不重复的随机数.<br>
     * 设置随机序列的范围,包含start和end
     * @param start 随机序列的起始值(包含在随机序列内)
     * @param end 随机序列的终止值(包含在随机序列内)
     */
    public Random(int start,int end){
    this.start=start;this.end=end;
    }
    /**
     * 获得下一个不重复的随机数.
     * @return 获得下一个不重复的随机数.
     * @throws NoSuchElementException 当所有不重复的随机数都取完的时候,再调用该方法,抛出该异常.该异常是运行时异常.
     */
    public int next(){
    while(end-start+1>buff.size()){
    int r = start+rand.nextInt(end-start+1);
    if(buff.contains(Integer.valueOf(r))==false){
    buff.add(Integer.valueOf(r));
    return r;
    }
    }
    throw new NoSuchElementException("所有随机序列已经取完.");
    }

    public static void main(String arg []){
    Random rand = new Random(1,52);
    for(int i=0;i<52;i++){
    System.out.println(rand.next());
    }
    }
    }