从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个1-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);
    }
}

 

posted on 2015-04-02 23:29  luckygxf  阅读(1030)  评论(0编辑  收藏  举报

导航