Math.random()解释
这是一个非常简单的Java(尽pipe可能适用于所有编程)问题:
Math.random()
返回从零到一个数字。
如果我想返回一个从零到100的整数,我会这样做:
(int) Math.floor(Math.random() * 101)
从一到一百,我会这样做:
(int) Math.ceil(Math.random() * 100)
但是如果我想从三点到五点呢? 它会像下面的声明:
(int) Math.random() * 5 + 3
我知道java.lang.util.Random
nextInt()
。 但是我想学习如何用Math.random()
来做到这一点。
int randomWithRange(int min, int max) { int range = (max - min) + 1; return (int)(Math.random() * range) + min; }
randomWithRange(2, 5)
输出10次:
5 2 3 3 2 4 4 4 5 4
在上面的例子中,边界是包含的,即[2,5], min
必须小于max
。
编辑:如果有人要尝试和愚蠢,并扭转min
和max
,你可以改变代码:
int randomWithRange(int min, int max) { int range = Math.abs(max - min) + 1; return (int)(Math.random() * range) + (min <= max ? min : max); }
编辑2:对于你关于double
s的问题,它只是:
double randomWithRange(double min, double max) { double range = (max - min); return (Math.random() * range) + min; }
再一次,如果你想防止白痴,它只是:
double randomWithRange(double min, double max) { double range = Math.abs(max - min); return (Math.random() * range) + (min <= max ? min : max); }
如果你想生成一个从0到100的数字,那么你的代码如下所示:
(int)(Math.random() * 101);
从10到20生成一个数字:
(int)(Math.random() * 11 + 10);
在一般情况下:
(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);
(其中lowerbound
是包含的和upperbound
排他性)。
位于java.util
包中的Java类的Random
类将更好地满足您的需求。 它有一些nextInt()
方法返回一个整数。 一个int参数将产生一个介于0和int之间的数字,后者不包括在内。