【问题标题】:Math.random() not working properly when using return使用 return 时 Math.random() 无法正常工作
【发布时间】:2012-12-12 17:57:33
【问题描述】:

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

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

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

【问题讨论】:

  • 如果 max>min,我怀疑你得到的值低于 min。您的问题可能出在其他地方。
  • 顺便说一句:通常最好使用预实例化的 java.util.Random 对象。
  • 我其实并没有关于 java.util.Rabdom,谢谢。

标签: java math random


【解决方案1】:

如果min/max 是320/640,我看不出你怎么可能得到283。

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

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

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

【讨论】:

  • 实际上可能是我误用了命令,但我很确定我曾经得到 283。而且我的代码中有括号。但汉克斯很多:)
  • @icecubelux:您是说您显示的代码不是给您带来问题的确切代码?
  • 我忘记了括号,但仅此而已
【解决方案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;
        }
    } 
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 2018-10-29
    • 2013-03-03
    • 2020-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多