-3

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

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

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

4

2 回答 2

5

我不明白你怎么可能得到283if min/ maxare 320/ 640

也就是说,您的代码中有一个错误会使其始终返回min。要修复它,请使用以下命令:

int s = (int)(Math.random() * (max - min) + min);

注意添加的括号。没有它们,您将结果转换为Math.random()to int。这总是给出零,使整个表达式计算为min

于 2012-12-12T18:00:16.603 回答
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;
        }
    } 
}
于 2012-12-12T18:22:19.340 回答