今天学桶排序,因为需要随机产生[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; }