通过对java中如何生成随机数的学习,把学到的和自己的一些想法做一下记录和总结。
一、利用random()方法生成随机数
在Math类中,Java语言提供了一个random的方法,通过这个方法可以让系统产生随机数。不过默认情况下,其产生的随机数范围比较小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围比较小,但是只要对这个方法进行一些灵活的处理,就可以获取任意范围的随机数。
如我们可以先通过random方法生成一个随机数,然后将结果乘以10。此时产生的随机数字即为大于等于0小于10的数字。然后再利用Int方法进行转换(它会去掉小数掉后面的数字,即只获取整数部分,不是四舍五入)。最后即可获取一个0到9的整数型随机数字。即对原有的random方法进行如下的变型:(int)(Math.Random()*10)即可。我们还可以对这个方法进行扩展,让其产生任意范围内的随机数。如需要产生[0,n)范围内的随机数,则可改为(int)(Math.Random()*n)即可。此时应用程序就会产生一个大于等于0小于n之间的随机数。如将n设置为5,那么其就会产生一个0到5之间的整数型的随机数。
这样只适用于从0开始的区间范围,如果起始区间不为0,如区间[min,max],用上面提到的变型不足以得出,可用变型:
(int)(min+Math.random()*(max-min+1))
如min=1,max=5,则生成的是区间[1,5]的正整数。同时,对从0开始的区间同样有效。
二、通过Random类生成随机数
利用这个方法,必须创建一个对象,通过实例化一个Random对象来创建一个随机数的生成器
Random random = new Random()
它的nextInt(int n)方法可产生[0,n)区间内的整数,这个方法也只能够控制上限,而不能够控制下限。如random.nextInt(20),随机产生[0,20)之间整数。
同样,适用于产生任意范围的随机数的变型:
int s = random.nextInt(max-min+1) + min;
思路就是要产生X到Y的随机数,可先先产生的0到Y-X的随机数,然后加上X就是所求。
还有一种思路即用取模的办法也可行,实质差不多,用于区间起始不为0的情况,即为:
int s = random.nextInt(max) % (max - min + 1) + min;
可以将这个写成一个带参数的方法,只要输入需要生成随机数的最大值最小值,就可以让这个方法来生成指定范围的随机数,定义自己的工具库。
三、产生随机字符
可以运用随机方法来产生一些其他想要的东西,如随机产生字符其实也可以利用类似随机数的方法,如产生a~z之间的字符,可调整为(char)(‘a’+Math.random()*(‘z’-‘a’+1))即可。