获取指定个数指定范围的随机数

简介:

我有这样的需求:

我有100道试题,id是0到99,我想从中找出20道试题组成一个试卷,要求试题不重复,打乱顺序:

Java代码   收藏代码
  1. /** 
  2.      * 产生无重复的随机数    sumInt:总样本 (0....sumInt-1) 
  3.      * resultSum: 产生的随机数个数 
  4.      *  
  5.      * @return 
  6.      */  
  7.     public static int[] randoms(int sumInt, int resultSum) {  
  8.         Random r = new Random();  
  9.   
  10.         int temp1, temp2;  
  11.           
  12.         //Total sample  
  13.         int send[] = new int[sumInt];//0....(sumInt-1)  
  14.         for (int i = 0; i < sumInt; i++) {  
  15.             send[i] = i;  
  16.         }  
  17.         int len = send.length;//The length of the total sample  
  18.         int returnValue[] = new int[resultSum];//Random number to return  
  19.         for (int i = 0; i < resultSum; i++) {  
  20.             temp1 = Math.abs(r.nextInt()) % len;  
  21.             temp2 = send[temp1];  
  22.             returnValue[i] = temp2;  
  23.             if (temp1 != len - 1) {  
  24.                 send[temp1] = send[len - 1];  
  25.                 send[len - 1] = temp2;  
  26.             }  
  27.             len--;  
  28.         }  
  29.         return returnValue;  
  30.     }  

 

测试:

public static void printArray(int[] ints) {

for (int i = 0; i < ints.length; i++) {

System.out.print(ints[i]);

if (i < ints.length - 1) {

System.out.print(" ,");

}

}

System.out.println();

}

 

@Test

public void test_randoms(){

printArray(SystemUtil.randoms(5, 3));

}

相关文章
|
5月前
|
存储 算法 索引
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数
|
2月前
|
C++
C++产生N以内的随机整数
C++产生N以内的随机整数
11 0
|
自然语言处理 算法 Python
利用函数求出一个数组最大三个数的乘积
利用函数求出一个数组最大三个数的乘积
109 0
随即输入10个数,并求10个整数最大值
随即输入10个数,并求10个整数最大值
93 0
随即输入10个数,并求10个整数最大值
4位数的随机数据
学习4位数的随机数据。
111 0
|
JavaScript
[随机数详解]生成一个随机数,生成指定范围的随机数及随机数组去重
写在前面: 很早之前在简书写过几篇关于随机数的文章之前写的很乱,现在重新整理一下这些知识点。本文包含了如下这些知识点:js生成随机数,生成指定范围的随机数,获得不重复随机数组。 js生成随机数。 Math.random()——生成大于等于0.0且小于1.0的一个随机数; 通常我们生成随机数都是使用这个方法,这个方法返回值是一个伪随机选择的数,该值大于等于0.0且小于1.0,即取值范围是[0.0,1.0)的左闭右开区间,在该范围内(近似)均匀分布。
650 0
[随机数详解]生成一个随机数,生成指定范围的随机数及随机数组去重
|
算法 C# 图形学
C# 之 随机数应用 -- 洗牌算法
随机数实例洗牌算法,超级简单的真随机算法。
356 0
C# 之 随机数应用 -- 洗牌算法