java 产生随机不重复的数组

来源:百度知道 编辑:UC知道 时间:2024/06/19 08:21:33
构造一个函数RandNum(int m, int n) 返回值是一个数组array[m]
要求产生的随机数组内任一值都在[0,n-1]之间,并且没有重复的数出现!
例如取m=10,n=20时 即要生成一个10个数的数组,要求数组内任意一个值都是在[0,n-1]之间,并且没有重复值出现。
小弟菜鸟望高手指教,感激不尽!!

最简单(最快想到)的实现的实现方法:
首先创建一个数组,并为每个元素赋值-1;因为楼主要求从[0,n-1]中取数呀
其次for循环,随即取值依次填入数组中。
最后,在上面的for循环中加入判断语句,看随即产生的数 是否与之前的数相同,如不相同,则添加,如相同,则将循环数减一,再次循环。就OK了

代码如下:
public int[] RandNum(int m, int n) {
int[] arr=new int[m];
for(int i=0;i<m;i++){
arr[i]=-1;
}

Random random=new Random();
B:for(int i=0;i<m;i++){
int num=random.nextInt(n);
for(int j=0;j<i;j++){
if(arr[j]==num){
i--;
continue B;
}
}
arr[i]=num;
}

return arr;
}
当然还有其他思路,楼主可以自己开拓!

Random random=new Random();是伪随机数
建议使用Math.random();
另外,用Set集合保证数字的非重复性。

/**
*
*/
package com.dianziermu.arith;

import java.util.HashSet;
import java.util.Set;

/**
* 产生无重复数据的随机数
* @author 点子二木
* @date 2009-6-11
* @version 1.0
*/
public class MathRandom {

/**
* @