清明时节,外面下起了大雨,听着雨点刷刷的淅沥声,我的心情也渐渐的平复下来,如蓝天般淡薄却又有云朵在上面漂浮着,废话不多说,下面进入正题:
这一次跟大家分享一下如何产生一个完全不相同的随机数组,大家可能都知道如何产生一个随机数组,但是问题就是,我们所产生的随机数组里面很有可能还有很多是相同的数字,有时候我们需要的是产生一连串完全不相同的数字,有下面两种方法:
方法一:比较法
将数组里面的每一个数组反复的进行比较,如果有相同的就继续产生新数,然后再比较,直到每一个数字都不相同为止,代码如下:
import java.util.Random;
publicclass Ran {
publicstaticvoid main(String args[]){
Ran r=new Ran();
r.initArr();
r.ranArr();
r.print();
}
intarr[]=newint[10];
//初始化一个数组
publicvoid initArr(){
Random ran=new Random();
for(int i=0;i<arr.length;i++){
arr[i]=ran.nextInt(10);
}
}
//使数组里面的数完全随机
publicvoid ranArr(){
int n=1;
boolean isNew=false;
Random r=new Random();
while(!isNew){
for(int k=0;k<n;k++){
for(int i=0;i<arr.length;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]!=arr[j]){
isNew=true;
}
else{
arr[i]=r.nextInt(10);
n++;
}
}
}
}
}
System.out.println("循环进行了"+n+"次");
}
//输出完全随机数数组
publicvoid print(){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
}
到这里,问题又出现了,如果我们的运气比较背的话,可能这个循环执行了上千次还是有相同的(PS:如果这样的话最好去买两张彩票),那么我们就要思考有没有更简单的方法了。
既然不想产生相同的数字,那么是不是可以产生了一个数之后就把这个数去掉,这样做当然是可以的,做法就是用一个队列将数组封装起来,产生了一个数之后就把这个数从队列里面删除,我们可以用JAVA里面自带的队列,也可以自定义队列,C语言照样可以实现,代码如下:
import java.util.ArrayList;
import java.util.Random;
publicclass RanArray {
publicstaticvoid main(String args[]){
RanArray ran=new RanArray();
ran.randArr();
}
ArrayList<Integer> arr=new ArrayList<Integer>();
inta[]=newint[10];
publicvoid randArr(){
for(int i=0;i<a.length;i++){
a[i]=i;
//将数组封装到队列当中
arr.add(a[i]);
}
Random ran=new Random();
int dex=arr.size();
for(int j=0;j<dex;j++){
//得到随机移除的数字
int index=ran.nextInt(arr.size());
int x=arr.remove(index);
System.out.print(x+" ");
}
}
}
这个方法的执行效率显然要高出很多。OK,今天就讲到这了。
清明时节雨纷纷,坐入红尘欲断魂,我欲乘风破茧来,明朝再看明月升。