`
javasunnyboy
  • 浏览: 75878 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java生成一定个数的无重复随机数

    博客分类:
  • java
阅读更多

原文链接:http://hi.baidu.com/yych13/blog/item/0ec29317d446d9074b90a76e.html

 

import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;

public class RandomGen {
    // 利用HashSet的特征,只能存放不同的值
    public static HashSet<Integer> set = new HashSet<Integer>();
    public int count;// 需要生成随机数的个数

    public RandomGen(int num) {
        this.count = num;
    }

    public static RandomGen init(int num) {
        return new RandomGen(num);
    }

    // 生成【begin,end】区间内num个随机数
    public void genRadoms(int begin, int end, int num, HashSet<Integer> set) {
        if (num > (end - begin + 1) || end < begin) {
            return;
        }
        for (int i = 0; i < num; i++) {// 生成num个随机数
            // 调用Math.random()方法
            int temp = (int) (Math.random() * (end - begin)) + begin;
            set.add(temp);// 将不同的数存入HashSet中
        }
        int setLen = set.size();
        // 如果存入的数小于指定生成的个数,则调用递归再生成剩余个数的随机数,如此循环,直到达到指定大小
        if (setLen < count) {
            genRadoms(begin, end, count - setLen, set);// 递归
        }
    }

   public static void printSet(HashSet<Integer> set) {// 打印结果
        int count = 1;
        Iterator<Integer> i = set.iterator();
        while (i.hasNext()) {
            System.out.print("["+count + "]:" + i.next()+" ");
            if(count%10==0){
                System.out.println();
            }
            count++;
        }
    }

    // 下面是网上的几种方法:

    // 使用一个临时数组,通过不断减小生成的数组索引实现:
    public static int[] noRepRandoms() {
        int[] tmpArray = new int[10];
        for (int i = 0; i < tmpArray.length; i++)
            tmpArray[i] = i;
        int[] results = new int[10];
        Random rd = new Random();
        int tmpIndex = 0, len = tmpArray.length;
        for (int i = results.length - 1; i >= 0; i--) {
            tmpIndex = Math.abs(rd.nextInt() % len);
            len--;
            results[i] = tmpArray[tmpIndex];
            tmpArray[tmpIndex] = tmpArray[len];
        }
        return results;
    }

    // 第一种方法,在一个待选数组中随机产生一个数,然后把他放到待选数组的最后,然后从length-1里随机产生下一个随机数,如此类推

    public static int[] randoms() {
        Random r = new Random();

        int temp1, temp2;
        int send[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
                16, 17, 18, 19, 20, 21 };
        int len = send.length;
        int returnValue[] = new int[22];
        for (int i = 0; i < 22; i++) {
            temp1 = Math.abs(r.nextInt()) % len;
            returnValue[i] = send[temp1];
            temp2 = send[temp1];
            send[temp1] = send[len - 1];
            send[len - 1] = temp2;
            len--;
        }
        return returnValue;
    }

    // 方法二:还是一个固定的无重复的数组,然后把这个数组随机调换位置,多次之后这个数组就是一个无重复的随机数组了。

    public static int[] random2() {
        int send[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
                16, 17, 18, 19, 20, 21 };
        int temp1, temp2, temp3;
        Random r = new Random();
        for (int i = 0; i < send.length; i++) // 随机交换send.length次
        {
            temp1 = Math.abs(r.nextInt()) % (send.length - 1); // 随机产生一个位置
            temp2 = Math.abs(r.nextInt()) % (send.length - 1); // 随机产生另一个位置
            if (temp1 != temp2) {
                temp3 = send[temp1];
                send[temp1] = send[temp2];
                send[temp2] = temp3;
            }
        }
        return send;
    }

    public static void main(String[] args) {
        RandomGen.init(80).genRadoms(10, 100, 80, set);
        RandomGen.printSet(set);
    }
}

========
[1]:10 [2]:11 [3]:12 [4]:13 [5]:14 [6]:15 [7]:17 [8]:16 [9]:19 [10]:18
[11]:21 [12]:20 [13]:23 [14]:22 [15]:24 [16]:26 [17]:29 [18]:28 [19]:31 [20]:30
[21]:34 [22]:35 [23]:32 [24]:33 [25]:38 [26]:39 [27]:36 [28]:37 [29]:42 [30]:43
[31]:40 [32]:41 [33]:47 [34]:45 [35]:50 [36]:49 [37]:48 [38]:54 [39]:53 [40]:52
[41]:59 [42]:57 [43]:56 [44]:63 [45]:62 [46]:61 [47]:68 [48]:69 [49]:70 [50]:71
[51]:65 [52]:66 [53]:67 [54]:76 [55]:77 [56]:78 [57]:79 [58]:72 [59]:73 [60]:74
[61]:75 [62]:85 [63]:87 [64]:86 [65]:81 [66]:80 [67]:83 [68]:82 [69]:93 [70]:92
[71]:95 [72]:94 [73]:89 [74]:88 [75]:91 [76]:90 [77]:98 [78]:99 [79]:96 [80]:97

分享到:
评论

相关推荐

    java生成十个不重复的随机数

    在Java编程中,生成十个不...以上就是使用Java生成十个不重复随机数的两种主要方法。无论选择哪种方式,都需要根据具体需求和性能要求进行权衡。在实际开发中,理解这些算法背后的逻辑和可能的优化方向是至关重要的。

    Java生成不重复的任意位随机数

    巧用Java实现得到任意位永不重复的随机数,很经典的代码!

    随机产生8位无重复数

    本项目基于Struts、Spring和Mybatis这三大经典Java Web框架,提供了一种灵活的方式来生成8位无重复的随机数,并确保每次生成的随机数都是唯一的。 首先,让我们来理解这三个框架的核心功能: 1. **Struts**:这是...

    Java实现生成n个不重复的随机数

    为了生成n个不重复的随机数,我们需要使用List来存储可能出现的数字,然后随机生成索引,根据索引从List中取出一个数,并将其移除。 下面是一个生成n个不重复的随机数的示例代码: ```java import java.util....

    生成指定随机数不重复的例子(可用)

    总结来说,这个例子提供了一种在Java中生成指定范围内不重复随机数的方法,通过结合`Random`类和集合数据结构实现。在myEclipse环境下,只需几步简单操作,即可运行并测试这段代码。对于开发者来说,理解和掌握这种...

    自己写的java产生不重复随机数

    直接运行main即可,参数为数字范围 比如10 运行后会输出9,3,0,7,2,8,4,1,5,6,

    JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    本文主要介绍了JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写,通过示例代码详细介绍了该工具类的实现过程,为读者提供了一个有价值的学习参考。 知识点1:JAVA随机数生成 JAVA中提供了多种方式来生成...

    java生成四位随机数,包含数字和字母 区分大小写,特别适合做验证码,android开发

    java生成四位随机数,包含数字和字母 区分大小写,特别适合做验证码,android开发

    Java 产生不重复随机数四种方法

    在Java编程中,生成不重复随机数是一项常见的需求,特别是在模拟抽奖、随机选取样本或创建唯一标识符等场景。本文将详细介绍四种不同的方法来实现这一功能。 ### 方法一:使用HashSet **HashSet** 是Java集合框架...

    生产不重复19位随机数

    生产不重复19位随机数,测试1000000数据没重复

    取不重复随机数.rar

    对于大数据量的情况,使用布隆过滤器可以高效地检测一个数是否已出现过,虽然可能存在一定的误判率,但在内存效率上非常优秀。不过,这种方法并不适用于需要精确无误的不重复随机数生成场景。 4. **哈希集合/字典*...

    利用时间生成8位不重复数

    生成的8位十六进制字符串在大多数情况下已经足够独特,但考虑到时间戳的精度,如果系统在同一秒内需要生成多个不重复的8位数字,可能需要结合其他策略,如添加进程ID、随机数或者序列号,以确保在极短时间内生成的ID...

    随机生成11位数字

    根据给定的信息,我们可以深入探讨如何在编程环境中生成指定长度的随机数字字符串,尤其是在Java环境中。这不仅是IT领域中常见的需求之一,也是许多应用程序开发过程中不可或缺的一部分。下面将详细介绍如何理解并...

    Java中不重复随机数的生成与分析.pdf

    Java 中不重复随机数的生成与分析是软件开发中的一个重要问题。随机数以其不确定性和偶然性等特点,因此在软件开发中得到了广泛应用。例如,在软件系统的测试中,用于产生具有普遍意义的测试数据,在加密系统中用来...

    Java分步生成指定范围内不重复的随机数

    使用了ArrayList和简单的循环来达到目的。用输入数字作为触发器。

    java 不重复的随机数序列

    // 需要生成的随机数个数 Random random = new Random(); HashSet&lt;Integer&gt; uniqueNumbers = new HashSet(count); while (uniqueNumbers.size() ) { uniqueNumbers.add(random.nextInt(range)); } // 输出...

    JAVA 生成随机数

    输入5个数(从1,2,…,21选) 玩法2:6+1(可以重复,选的号码在相同的位数上中了几多个,只算从一到九不算0) 输入7个数字(代表购买彩票的号码,最后一位特别号) 根据用户选择的玩法,随机生成开奖号码,与...

    生成不重复随机数的算法

    ### 生成不重复随机数的算法 在许多应用领域中,比如在线考试系统、游戏开发或是数据处理等场景,生成不重复的随机数是一项非常重要的技术。本文将详细介绍几种不同的方法来实现这一功能,并通过具体的Java代码示例...

    0-99的不重复随机数

    这个标题"0-99的不重复随机数"表明我们要讨论的是如何利用编程语言生成一个包含0到99所有整数且每个数只出现一次的随机序列。 描述中提到“代码很精简”,这可能是指实现该功能的代码行数较少,易于理解和实现。...

    数组放不重复的随机数

    需要注意的是,随着数组长度的增加,生成不重复随机数的时间复杂度也会相应提高。因此,在实际应用中还需考虑算法的效率问题。此外,还可以尝试使用其他数据结构(如集合类`Set`)来优化去重过程,进一步提高程序...

Global site tag (gtag.js) - Google Analytics