Math.random()解释

时间:2011-11-01 02:11:11

标签: java math

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

  

Math.random()返回0到1之间的数字。

如果我想返回0到100之间的整数,我会这样做:

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

在一百到一百之间,我会这样做:

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

但如果我想获得三到五之间的数字怎么办?这会是如下声明:

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

我知道nextInt()中的java.lang.util.Random。但我想学习如何使用Math.random()

5 个答案:

答案 0 :(得分:158)

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

EDIT2:关于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);
}

答案 1 :(得分:42)

如果要生成0到100之间的数字,那么您的代码将如下所示:

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

要生成10到20之间的数字:

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

在一般情况下:

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

(其中lowerbound为包含且upperbound为独占)。

包含或排除upperbound取决于您的选择。 我们说range = (upperbound - lowerbound) + 1然后upperbound是包容性的,但如果range = (upperbound - lowerbound)upperbound是独占的。

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

答案 2 :(得分:19)

位于java.util包中的Random类Java将更好地满足您的目的。它有一些返回整数的nextInt()方法。采用int参数的那个将生成一个介于0和int之间的数字,后者不包括在内。

答案 3 :(得分:1)

要生成介于10到20之间的数字,可以使用java.util.Random

int myNumber = new Random().nextInt(11) + 10

答案 4 :(得分:0)

这是一个接收边界并返回随机整数的方法。它略高一些(完全通用):边界可以是正面和负面,最小/最大边界可以任意顺序。

int myRand(int i_from, int i_to) {
  return (int)(Math.random() * (Math.abs(i_from - i_to) + 1)) + Math.min(i_from, i_to);
}

通常,它会找到边框之间的绝对距离,获得相关的随机值,然后根据底部边框移动答案。

相关问题