完全随机数的产生

       清明时节,外面下起了大雨,听着雨点刷刷的淅沥声,我的心情也渐渐的平复下来,如蓝天般淡薄却又有云朵在上面漂浮着,废话不多说,下面进入正题:

       这一次跟大家分享一下如何产生一个完全不相同的随机数组,大家可能都知道如何产生一个随机数组,但是问题就是,我们所产生的随机数组里面很有可能还有很多是相同的数字,有时候我们需要的是产生一连串完全不相同的数字,有下面两种方法:

方法一:比较法

       将数组里面的每一个数组反复的进行比较,如果有相同的就继续产生新数,然后再比较,直到每一个数字都不相同为止,代码如下:

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,今天就讲到这了。

清明时节雨纷纷,坐入红尘欲断魂,我欲乘风破茧来,明朝再看明月升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值