我有一个程序,我希望一个对象返回两个数字之间的值。但问题是,大多数时候,我得到的数字不在边界之内。这是代码:
public int getSize() {
int s = (int)Math.random() * (max - min) + min;
return s;
}
min 和 max 在代码中都定义为 320 和 640,但有时我得到的值低于我需要的值(例如我曾经得到 283),有时甚至更高。有人可以帮忙吗?
我不明白你怎么可能得到283
if min
/ max
are 320
/ 640
。
也就是说,您的代码中有一个错误会使其始终返回min
。要修复它,请使用以下命令:
int s = (int)(Math.random() * (max - min) + min);
注意添加的括号。没有它们,您将结果转换为Math.random()
to int
。这总是给出零,使整个表达式计算为min
。
如果您可以访问 C#,您可以尝试以下操作吗?这在功能上等同于您的任务,并且不应生成 320 和 640 范围之外的数字。如果是这样,您可以将 Java 代码的逻辑与它进行比较,以查看您在哪里犯了错误。
namespace TestRand
{
class TestRand
{
private static Random r;
private const int min = 320;
private const int max = 640;
public static void Main()
{
r = new Random();
for (int i = 0; i < 1000; i++)
{
Console.WriteLine("{0} - {1}", i, getSize());
}
}
public static int getSize()
{
int s = (int)(r.NextDouble() * (max - min)) + min;
return s;
}
}
}