Math.random() 解释

2022-08-31 08:16:01

这是一个非常简单的Java问题(尽管可能适用于所有编程):

Math.random()返回一个介于 0 和 1 之间的数字。

如果我想返回一个介于零和百之间的整数,我会这样做:

(int) Math.floor(Math.random() * 101)

在一百之间,我会做:

(int) Math.ceil(Math.random() * 100)

但是,如果我想得到一个介于三到五之间的数字呢?它会像以下语句一样:

(int) Math.random() * 5 + 3

我知道在.但是我想学习如何用.nextInt()java.lang.util.RandomMath.random()


答案 1
int randomWithRange(int min, int max)
{
   int range = (max - min) + 1;     
   return (int)(Math.random() * range) + min;
}

输出10倍:randomWithRange(2, 5)

5
2
3
3
2
4
4
4
5
4

边界是包含性的,即 [2,5],并且必须小于上述示例中的边界。minmax

编辑:如果有人要尝试愚蠢并反转,您可以将代码更改为:minmax

int randomWithRange(int min, int max)
{
   int range = Math.abs(max - min) + 1;     
   return (int)(Math.random() * range) + (min <= max ? min : max);
}

编辑2:对于您关于s的问题,它只是:double

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);
}

答案 2

如果要生成从 0 到 100 的数字,则代码将如下所示:

(int)(Math.random() * 101);

要生成从 10 到 20 的数字:

(int)(Math.random() * 11 + 10);

在一般情况下:

(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);

(其中具有包容性和排他性)。lowerboundupperbound

包含或排除取决于您的选择。假设那么是包容性的,但如果那么是排他性的。upperboundrange = (upperbound - lowerbound) + 1upperboundrange = (upperbound - lowerbound)upperbound

示例:如果我想要一个介于 3-5 之间的整数,那么如果范围是 (5-3)+1,则 5 是包含的,但如果范围只是 (5-3),则 5 是排他性的。