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

编辑:如果有人要尝试和愚蠢,并扭转minmax ,你可以改变代码:

 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之间的数字,后者不包括在内。