首页 > 代码库 > java 随机数不重复

java 随机数不重复

package test;


import java.util.HashSet;

import java.util.Random;


public class Snippet {

/**

* 随机指定范围内N个不重复的数

* 在初始化的无重复待选数组中随机产生一个数放入结果中,

* 将待选数组被随机到的数,用待选数组(len-1)下标对应的数替换

* 然后从len-2里随机产生下一个随机数,如此类推

* @param  max  指定范围最大值

* @param  min  指定范围最小值

* @param  n  随机数个数

* @return  int[] 随机数结果集

*/

public static int[] randomArray(int min,int max,int n){

int len = max-min+1;

if(max < min || n > len){

return null;

}

//初始化给定范围的待选数组

int[] source = new int[len];

       for (int i = min; i < min+len; i++){

        source[i-min] = i;

       }

       

       int[] result = new int[n];

       Random rd = new Random();

       int index = 0;

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

        //待选数组0到(len-2)随机一个下标

        int  s=rd.nextInt()%len;

  //     System.out.print(s-- +",");

           index = Math.abs(rd.nextInt()%len--);

//            System.out.println(index);

           //将随机到的数放入结果集

           result[i] = source[index];

           //将待选数组中被随机到的数,用待选数组(len-1)下标对应的数替换

           source[index] = source[len];

       }

       return result;

}

    public static void main(String[] args) {

// int[] reult1 = randomCommon(20,50,10);

// for (int i : reult1) {

// System.out.println(i);

// }

int[] reult2 = randomArray(0,4,5);

for (int i : reult2) {

System.out.print(i);

}

// HashSet<Integer> set = new HashSet<Integer>();

// randomSet(20,50,10,set);

//         for (int j : set) {

//         System.out.println(j);

// }

}

}