您的位置:首页 > 编程语言 > Java开发

随机出不重复的数字(不用随机出然后进行比较 JAVA实现)

2009-08-23 11:44 585 查看
实现的原理:

1.初始化你要随机出的不重复的数字的范围 这里我用一个数组 比如{0,1,2,3,4,5,6,7}

2.然后打乱数组中数字的位置

具体步骤:随机出来一个index,将这个index作为数组的下标的数字与数组中最后一个数字交换

比如:随机出2 那么 结果就是 {0,1,7,3,4,5,6,2}

这样重复操作 数组的长度的一半次也就是 lenght/2 次,因为假设每次交换的位置都是不同的,我们就可以完全把数字打乱。

当然重复次数 越多 就打的越乱

假设重复lenght/2 此以后 数组是{5,7,0,2,4,6,1,3} 最后一次是3和4换

3.从最后一次随机出来的index,顺序选出之前的n-1个数字和这个数字一共n个 作为结果 假设n是4

那就将{7,0,2,4} 作为结果

代码如下

//随机出randomCount个不重复的数字,数字所在的范围是 start 到 end 包括start 和end

public static int[] randomInts(int start,int end,int randomCount){

//计算出要初始化的,用于打乱的数字数组的长度

int count=end-start+1;

// 从start 到 end 初始化这个数组
int[] ints=new int[count];
for(int i=0;i<count;i++){
ints[i]=i+start;
}

Random r=new Random();
int index=0,temp=0;

//做数组长度一半的 交换
for(int i=0;i<count/2;i++){

//随机出一个数组的下标
index=r.nextInt(count);

//将数组最后一个数字保存在temp中
temp=ints[count-1];

//将数组的第index+1个数放到最后一个位置上
ints[count-1]=ints[index];

//将刚才保存的数,放到数组中第index+1的位置上
ints[index]=temp;

//完成交换
}

//找出最后一次交换的index,也就是数组第index+1个数的位置

//从这个位置往前数randomCount,便找到,结果数组在被打乱的数组中的起始位置
index=index-randomCount;

//如果index越界了,就从第一个开始
if(index<0){
index=0;
}

//初始一个结果数组长度为randomCount

int[] rs=new int[randomCount];

//从被打乱的数字的第index+1个数开始 ,依次将数字放到结果数组中
for(int i=0;i<randomCount;i++){
rs[i]=ints[index+i];
}
return rs;

}

使用 假设我要从0到29这30个数字随机出15个不重复的数字,调用如下

int[] rs=randomInts(0,29,15);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: