我有一个程序,我希望一个对象返回两个数字之间的值。但问题是,大部分时间,我得到的数字都不在边界内。这是代码:
public int getSize() {
int s = (int)Math.random() * (max - min) + min;
return s;
}
min和max都在代码中定义为320和640,但我有时得到的值低于我需要的值(例如我曾经得到283),有时候更高。有人可以帮忙吗?
答案 0 :(得分:4)
如果283
/ min
为max
/ 320
,我不知道如何获得640
。
也就是说,您的代码中存在一个错误,使其始终返回min
。要解决此问题,请使用以下命令:
int s = (int)(Math.random() * (max - min) + min);
请注意添加的括号。如果没有它们,则会将Math.random()
的结果投射到int
。这始终为零,使整个表达式的计算结果为min
。
答案 1 :(得分:2)
如果您有权访问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;
}
}
}