java 产生随机不重复的数组

构造一个函数RandNum(intm,intn)返回值是一个数组array[m]要求产生的随机数组内任一值都在[0,n-1]之间,并且没有重复的数出现!例如取m=10,n... 构造一个函数RandNum(int m, int n) 返回值是一个数组array[m]
要求产生的随机数组内任一值都在[0,n-1]之间,并且没有重复的数出现!
例如取m=10,n=20时 即要生成一个10个数的数组,要求数组内任意一个值都是在[0,n-1]之间,并且没有重复值出现。
小弟菜鸟望高手指教,感激不尽!!
展开
 我来答
憨厚且纯朴灬小雀1461
2009-06-09 · TA获得超过387个赞
知道答主
回答量:60
采纳率:0%
帮助的人:0
展开全部
最简单(最快想到)的实现的实现方法:
首先创建一个数组,并为每个元素赋值-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;
}
当然还有其他思路,楼主可以自己开拓!
百度网友0dd34df
2009-06-11 · TA获得超过1493个赞
知道小有建树答主
回答量:360
采纳率:0%
帮助的人:0
展开全部
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 {

/**
* @param args
*/
public static void main(String[] args) {
Object[] result = RandomNum(10, 20);
printArray(result);
}

/**
* 产生随机数数组
* @param m随机数的个数
* @param n随机数的最大值
* @return
*/
public static Object[] RandomNum(int m, int n) {

Set resultSet = new HashSet(m);
for (int index = 0; resultSet.size() < m; index++) {
double random = Math.random();
int randomNum = (int)(random*((n-1)-0+1));//random*(max-min+1)
resultSet.add(randomNum);
}
Object[] result = resultSet.toArray();
return result;
}

/**
* 打印数组
* @param array
*/
private static void printArray(Object[] array) {
if (array != null) {
for (int index = 0; index < array.length; index++) {
System.out.println(array[index]);
}
}
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hight1234
2009-06-09 · TA获得超过161个赞
知道答主
回答量:277
采纳率:0%
帮助的人:180万
展开全部
标准答案:
import java.util.*;
public class CreateRandomArray{
public int[] RandNum(int m, int n){
if(n-1<m){
System.out.println("n-1的值必须大于等于M");
System.exit(0);
}
Random random = new Random();
int count = 0;
int[] RandomArray =new int[m];
while(count<m){
int IRandom = random.nextInt(n);
if(!isEqual(RandomArray,IRandom)){
RandomArray[count]=IRandom;
count++;
}
}
return RandomArray;
}
public boolean isEqual(int IArray[],int IRandom){
for(int x : IArray){
if(x==IRandom) return true;
}
return false;
}

public static void main(String[] args){
CreateRandomArray cr = new CreateRandomArray();
int IRArray[]=cr.RandNum(10,20);
for(int x : IRArray)
System.out.print(x+" ");

}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2016-04-15
展开全部
//实测高效精确

int[] RandomNum(int m,int n){
int[] v = new int[m];
boolean[] b = new boolean[n];
Random r = new Random();
do{
int x = r.nextInt(n);
if(!b[x]){
v[--m]=x;
b[x]=true;
}
}
while(m>0);
return v;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
大漠小北
2009-06-09 · TA获得超过1138个赞
知道小有建树答主
回答量:365
采纳率:0%
帮助的人:468万
展开全部
so easy,可以给你提供很多种实现,需要了M我,在线
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式