Java产生随机数

        今天学桶排序,因为需要随机产生[0,1)的等长小数,于是随手谷歌之,翻了些资料,与诸君共享……

一.java.lang.Math

        该类下边有random()方法,产生[0,1)的double值,注意1.0取不到;所以int p = (int)(Math.random()*10) 会产生[0,9]的整数值,没有10。

        补充:Math.round(11.5) = 12,Math.round(-11.5) = -11,其实round函数相当于floor(x+0.5)。ps:这是一道真实的面试题,大公司的。

       PI:Math.PI,自然对数是Math.E,还有log、log10、hypot、floor、ceil,max、min、exp。

二.若干问题

  如何让Math.random()生成的随机数包括1(不是数字包含1,而是产生1.0)?刚想到先随机Random.nextInt(2)以50%概率分别产生0和1,若是0,就选择Math.random(),否则选择1;不过这样产生1的概率就是50%了。随机选取0-9,a-z,A-Z所有字符组成的一字符数组chararray(生成的时候一个一个写太麻烦,直接nw一个String,然后toCharArray),也可以chararray[Random.nextInt(62)]如何产生的数字包含1(三位数)?先new String("012……9"),先产生两个数字直接用或者当String里的下标取值,然后把1插入就行了。

三.java.util.Random

        查看API发现有nextInt(int n),nextDouble,nextFloat等,后两者都是返回[0,1),前者返回[0,n)(像C/C++里的rand()函数,返回0到RAND_MAX)。

        则产生[0,10]可以整数可以:

Random r = new Random(); 
int p =r.nextInt(10)+1; //这个是[1,10]
//------------------
(int)(Math.random()*11)

          更一般地,产生[min,max]的整数:

int createRandom(int min, int max) {
    Random r = new Random();
    return r.nextInt(max-min+1)+ min;
}
posted @ 2013-07-25 13:52  加拿大小哥哥  阅读(1187)  评论(0编辑  收藏  举报