当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

完全随机数的产生

发表于: 2013-04-04   作者:cq520   来源:转载   浏览:
摘要:        清明时节,外面下起了大雨,听着雨点刷刷的淅沥声,我的心情也渐渐的平复下来,如蓝天般淡薄却又有云朵在上面漂浮着,废话不多说,下面进入正题:        这一次跟大家分享一下如何产生一个完全不相同的随机数组,大家可能都知道如何产生一个随机数组,但是问题就是,我们所产

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

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

方法一:比较法

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

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

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号