使用return时Math.random()无法正常工作

时间:2012-12-12 17:57:34

标签: java math random

我有一个程序,我希望一个对象返回两个数字之间的值。但问题是,大部分时间,我得到的数字都不在边界内。这是代码:

public int getSize() {
  int s = (int)Math.random() * (max - min) + min;
  return s;
}

min和max都在代码中定义为320和640,但我有时得到的值低于我需要的值(例如我曾经得到283),有时候更高。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:4)

如果283 / minmax / 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;
        }
    } 
}