这是一个非常简单的Java(虽然可能适用于所有编程)问题:
Math.random()
返回0到1之间的数字.
如果我想返回0到100之间的整数,我会这样做:
(int) Math.floor(Math.random() * 101)
Run Code Online (Sandbox Code Playgroud)
在一百到一百之间,我会做:
(int) Math.ceil(Math.random() * 100)
Run Code Online (Sandbox Code Playgroud)
但是,如果我想获得三到五之间的数字怎么办?是否会像以下声明:
(int) Math.random() * 5 + 3
Run Code Online (Sandbox Code Playgroud)
我知道nextInt()
的java.lang.util.Random
.但我想学习如何做到这一点Math.random()
.
Aus*_*oke 161
int randomWithRange(int min, int max)
{
int range = (max - min) + 1;
return (int)(Math.random() * range) + min;
}
Run Code Online (Sandbox Code Playgroud)
输出randomWithRange(2, 5)
10次:
5
2
3
3
2
4
4
4
5
4
Run Code Online (Sandbox Code Playgroud)
边界是包容性的,即[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);
}
Run Code Online (Sandbox Code Playgroud)
编辑2:关于double
s 的问题,它只是:
double randomWithRange(double min, double max)
{
double range = (max - min);
return (Math.random() * range) + min;
}
Run Code Online (Sandbox Code Playgroud)
再次,如果你想要愚蠢的证明它只是:
double randomWithRange(double min, double max)
{
double range = Math.abs(max - min);
return (Math.random() * range) + (min <= max ? min : max);
}
Run Code Online (Sandbox Code Playgroud)
Tee*_*zy7 44
如果要生成0到100之间的数字,那么您的代码将如下所示:
(int)(Math.random() * 101);
Run Code Online (Sandbox Code Playgroud)
要生成10到20之间的数字:
(int)(Math.random() * 11 + 10);
Run Code Online (Sandbox Code Playgroud)
在一般情况下:
(int)(Math.random() * ((upperbound - lowerbound) + 1) + lowerbound);
Run Code Online (Sandbox Code Playgroud)
(在哪里lowerbound
和upperbound
包括在内).
包含或排除upperbound
取决于您的选择.让我们说range = (upperbound - lowerbound) + 1
那upperbound
是包容性的,但如果range = (upperbound - lowerbound)
那时upperbound
是排他性的.
示例:如果我想要一个介于3和5之间的整数,那么如果range是lowerbound
5则包含但是如果range只是upperbound
5则是独占的.