问题

有这样一种需求,在这样一个数组中String[] arr = new String[]{"电商", "互联网", "小程序", "网络推广", "文化", "教育", "造型设计", "服装设计"};,随机取n个选项且不重复,n随机且在1-m这个范围之内,其中m是个确定的数且m<=数组长度。

思路

取特定区间的一个随机数

// 从区间[1,4]随机取一个数
Random random = new Random();
int num = random.nextInt(4) + 1; // 从区间[MIN,MAX]随机取一个数(MAX>MIN,MIN>=0)
Random random = new Random();
int num = random.nextInt(MAX - MIN + 1) + MIN; // random.nextInt(num)取值范围是 [0,num)

想要从一个长度为M的数组中随机的取其中的N个元素,有两种思路

  1. 产生N个不重复的随机数[0,M-1],根据下标从数组中取值
  2. 将数组内元素顺序打乱,取前N个数,即对前N个数,每个都和元素进行交换,随机么?

思路1

int startArray[] = {0,1,2,3,4,5,6,7,8,9};//seed array
int N = 10;//随机数个数
int resultArray[] = new int [10];//结果存放在里面
for(int i = 0; i < N; i++)
{
int seed = random(0, startArray.length - i);//从剩下的随机数里生成
resultArray[i] = startArray[seed];//赋值给结果数组
startArray[seed] = startArray[startArray.length - i - 1];//把随机数产生过的位置替换为未被选中的值。
}

思路2

//

解决

Random random = new Random();
int num = random.nextInt(4) + 1;
System.out.println("num:" + num);
String[] arr = new String[]{"电商", "互联网", "小程序", "网络推广", "文化", "教育", "造型设计", "服装设计"};
int len = arr.length;
for (int i = 0; i < num; ++i) {
int idx = random.nextInt(len - i);
System.out.println(arr[idx]);
String tmp = arr[idx];
arr[idx] = arr[len - i - 1];
arr[len - i - 1] = tmp;
}

参考

产生N个不重复的随机数的快速算法

最新文章

  1. 《分布式事务解决之道》沙龙ppt共享
  2. 深入学习jQuery选择器系列第六篇——过滤选择器之状态选择器
  3. Bestcoder Round #84
  4. 长轮询(long polling)
  5. PMP 第十章 项目沟通管理
  6. ecmall程序结构图与常用数据库表
  7. JS 原型链学习总结
  8. android学习——MeasureSpec介绍及使用
  9. 远程mysql出现ERROR 1130 (HY000): Host &#39;172.17.42.1&#39; is not allowed to connect to this MySQL server
  10. Linux学习笔记总结--云服务器挂载磁盘
  11. iOS开发雕虫小技之傻瓜式定位神器-超简单方式解决iOS后台定时定位
  12. eclipse中debug快捷方式
  13. aforge之hough
  14. Apache2 MPM 模式了解
  15. javascript获取json对象的key名称的两种方法
  16. [学习笔记] 多项式与快速傅里叶变换(FFT)基础
  17. 细说 Java 的深拷贝和浅拷贝
  18. 使用Openfire配置安卓客户端聊天服务器
  19. windows重装后,不重装oracle,直接恢复数据库
  20. 【SoDiaoEditor电子病历编辑器】编辑器支持移动化

热门文章

  1. [源码解析] TensorFlow 分布式环境(7) --- Worker 动态逻辑
  2. HTML5摇一摇(上)—如何判断设备摇动
  3. 10行 JavaScript 实现文本编辑器
  4. 【promise| async/await】代码的控制力
  5. Vulnhub 之 Earth
  6. 技术管理进阶——什么Leader值得追随?
  7. jupyter notebook 调用.py文件
  8. Spring-aop注解开发(切点表达式的抽取)
  9. LC-76
  10. Hash-题解-方法