欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java案例实现不重复的随机数

时间:2022-11-10 09:22:06|栏目:JAVA代码|点击:

需求:获得十个1-20的随机数,要求随机数不能重复,存储到集合中并遍历

分析:

  • 1.创建Set集合对象,可以使用HashSet也可以使用TreeSet,区别在于TreeSet是排序后的
  • 2.创建随机数对象,获取一个随机数
  • 3.判断集合长度是否大于10,是停止生成、存储并遍历
  • 否:继续生成直到长度大于10停止生成、存储并遍历
  • 4.输出

代码:

public class SetDemo {
    public static void main(String[] args) {
        //创建Set集合对像
        Set<Integer> s=new TreeSet<Integer>();
        //创建随机数对象
        Random r=new Random();
        while(s.size()<10){
            int num= r.nextInt(20)+1;
            s.add(num);
        }
        for (Integer i:s){
            System.out.println(i);
        }
    }
}
?

补充:

通过单个数组简易实现不重复随机数生成,先上源码。

/**
* 获取随机数组
* @param 源数组
 * @param size 目标数组大小
 * @return 随机数组
 */
public static int[] getRandomRes(int[] source,int size){
    if (source == null && size > source.length) {
        return;
    }
    int[] result = new int[size];
    Random random = new Random();
    for (int i = 0; i < size; i++) {
        int randomIndex = random.nextInt(source.length - 1 - i);
        int randomRes = source[randomIndex];
        result[i] = randomRes;
        int temp = source[randomIndex];
        source[randomIndex] = source[source.length - 1 - i];
        source[source.length - 1 - i] = temp;
    }
    return result;
}

下面看图解,数字为数组的index。

黑色数字表示能随机到的数,红色代表不能随机到数。
因此只能随机到index:0~4的数,假设是2,然后将2与index5互换位置。

此时结果result[] = {2}

继续循环

从前index:0~3中循环,假设取出index0,与index4互换,此时结果为result = {2,0},依次类推。

优点:简单快捷
缺点:每次无法取到最后一个数。

不断随机,使用Set去重

/**
*生成随机数组
*@param size 目标数组大小
*@param max 目标数最大值
*/
public Set<Integer> getRandomSet(int size,int max){
    Random random= new Random();
    Set<Integer> result= new LinkedHashSet<Integer>();
    while (generated.size() < size)
    {
        Integer next = rng.nextInt(max) + 1;
        generated.add(next);
    }
}

此处使用LinkedHashSet保证插入顺序与结果相同。

上一篇:java编程FinalReference与Finalizer原理示例详解

栏    目:JAVA代码

下一篇:SpringBoot整合Sa-Token实现登录认证的示例代码

本文标题:Java案例实现不重复的随机数

本文地址:http://www.codeinn.net/misctech/218616.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有