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

网友投稿 342 2022-08-16


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

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

分http://析:

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

代码:

public class SetDemo {

public static void main(String[] args) {

//创建Set集合对像

Set s=new TreeSet();

//创建随机数对象

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。

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

此时结果result[] = {2}

继续循环

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

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

不断随机,使用Set去重

/**

*生成随机数组

*@param size 目标数组大小

*@param max 目标数最大值

*/

public Set getRandomSet(int size,int max){

Random random= new Random();

Set result= new LinkedHashSet();

while (generated.size() < size)

{

Integer next = rng.nextInt(max) + 1;

generated.add(next);

}

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Jenkins初级使用过程中的异常处理
下一篇:Java案例使用比较排序器comparator实现成绩排序
相关文章

 发表评论

暂时没有评论,来抢沙发吧~