从1到1000中随机取出900个不重复的随机数

思路
用大小为1000的数组保存1-1000的整数,int nums[1000] = {1,2,3,...1000}。
使用Random.nextInt()获取[0,999]下标值,即index = Random.nextInt(1000),交换坐标为0和index的值
在使用Random.nextInt()获取[0,999]下标值,即index = Random.nextInt(1000),交换坐标为1和index的值
...
在使用Random.nextInt()获取[0,999]下标值,即index = Random.nextInt(1000),交换坐标为899和index的值

最后[0-899]保存的即为900个0-900

import java.util.Random;

public class RandomNums {

    /**
     * 从整数min~max中获取n个随机整数
     * @param min 随机整数最小值
     * @param max 随机整数最大值
     * @param n 随机数个数
     * @return 随机产生的n个整数
     */
    public void getRandomNums(int min, int max, int n){
        int length = max - min + 1;
        if(max < min || n > length)
            return;

        //将范围min~max范围的整数放到数组中
        int nums[] = new int[length];
        for(int i = min; i <= max; i++){
            nums[i - min] = i;
        }//for

        Random random = new Random();
        for(int i = 0; i < n;i++){
            int index = random.nextInt(max);                    //随机产生一个数组下标
            exchange(nums, i, index);                            //0~n-1存放n个随机数
        }//for

        for(int i = 0; i < n; i++)
            System.out.println(nums[i]);
    }

    /**
     * 交换数组中两个元素的值
     * @param nums
     * @param i
     * @param j
     */
    public void exchange(int nums[], int i, int j){
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }

    public static void main(String args[]){
        RandomNums randomNums = new RandomNums();
        randomNums.getRandomNums(1, 1000, 900);
    }
}
时间: 2024-10-29 04:07:58

从1到1000中随机取出900个不重复的随机数的相关文章

JS 在指定数组中随机取出N个不重复的数据

/**思路:每次随机从数组抽出一个数放进新的数组,然后将这个数从原数组中剔除,这个就不会抽到重复的数了*/function makeRandomArr(arrList,num){ if(num>arrList.length){ return; } // var tempArr=arrList.concat(); var tempArr=arrList.slice(0); var newArrList=[]; for(var i=0;i<num;i++){ var random=Math.flo

array_rand() 从数组中随机取出一个或多个单元

array_rand() - 从数组中随机取出一个或多个单元 mixed array_rand ( array $input [, int $num_req = 1 ] ) 从数组中取出一个或多个随机的单元,并返回随机条目的一个或多个键. 参数 input: 输入的数组.必需.规定数组. num_req: 指明了你想取出多少个单元.可选.规定返回多少随机键名.如果指定的数目超过了数组里的数量将会产生一个 E_WARNING 级别的错误. 例子 1 从数组返回一个随机键: <?php $a=arr

从一个数组中随机取出一定数量元素组成新数组

/** * 从一个数组中随机取出一定数量元素组成新数组 * @param array 一个String类型的数组 * @param number需要取出元素的数量 * @return 一个随机的数组 * @throws NullPointerException原数组不能为空 *@throws ArrayIndexOutOfBoundsException新数组长度应不大于原数组的长度 */ public static String[]  getRandomArray(String[] array,

JS从数组中随机取出几个数组元素的方法

原文链接:http://caibaojian.com/js-get-random-elements-from-array.html js如何从一个数组中随机取出一个元素或者几个元素. 假如数组为· var items = ['1','2','4','5','6','7','8','9','10']; 1.从数组items中随机取出一个元素 var item = items[Math.floor(Math.random()*items.length)]; 2.从前面的一篇随机数组中随机取几个元素

从一堆数中随机取出几个数

int c = keywTab.Rows.Count; if (c > 3) { int[] num = new int[4]; Random r = new Random(); for (int i = 0; i < num.Length; i++) { num[i] = r.Next(c); for (int j = 0; j < i; j++) { if (num[i] != 0 && num[i] != num[j]) i++; i--; } } int x =

从一个数组中随机产生多个不重复数据的方法

此算法来源与网上,纯属个人心得!!! 在一个已知的集合中,随机取出多个(小于集合长度)不重复的数据: List<Integer> list = new ArrayList<Integer>(); List<Integer> output = new ArrayList<Integer>(); //产生一个长度为一千的集合 for (int i = 1; i < 1000; i++) { list.add(i); } Random random = ne

STL系列十一 随机三趣题——随机重排,文件中随机取一行,生成N个随机数

本文将介绍三个有趣的随机问题,分别是随机重新排列.从文件中随机取一行数据.生成N个随机数. 一.随机重新排列 将一个序列打乱并对其进行随机的重新排列,关键在于每种序列的被选择概率要一样,不然有失"公平".现在让我们来寻找如何保证每种序列被选择的概率一样大的算法. 首先假设这个数组只有二个元素,设数组a为{1, 2},显然这个数组只有二种可能的排列,要么是{1,2}要么是{2,1}.很容易想到一种方法--只要第二个元素有50%的概率与第一个元素交换即可.用代码表现下: if (rand(

js从数组中随机获取n个不重复的数据

做云课堂的作业时遇到一要求,实现刷新页面时显示不同数据,(数组中20个据,页面加载10个).思路就是从0-19中随机生成10个不同的数,让数组取下标输出数据. 下面是在num的范围内生成n个不重复的数.例如从10以内随机生成5个不同的数randomNum(10,5); function randomNum(num,n) { if(typeof num!=="number"||typeof n!=="number") return false; //对象检测 var

从mysql数据表中随机取出一条记录

核心查找数据表代码: select * from 表名 order by rand( ) limit 1; //此处的1就是取出数据的条数 但这样取数据网上有人说效率非常差的,那么要如何改进呢 搜索Google,网上基本上都是查询max(id) * rand()来随机获取数据. SELECT * FROM `table` AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM `table`)) AS id) AS t2 WHERE t1.i