这是一个非常简单的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()
。
答案 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
。
编辑:如果有人试图愚蠢地反转min
和max
,您可以将代码更改为:
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)
答案 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);
}
通常,它会找到边框之间的绝对距离,获得相关的随机值,然后根据底部边框移动答案。