【问题标题】:Adding random numbers 1-1000000 in an array?在数组中添加随机数 1-1000000?
【发布时间】:2017-06-26 22:07:37
【问题描述】:

我查看了如何将 0-99 添加到数组中。但是,我的任务是 1-1000000。我只是不断得到非常大的数字,而不是小数字。仅仅是因为获得大量数字的机会要高得多吗?我只是想确保我做对了。提前感谢您的帮助!

int a[]= new int[50];
for(int i = 0; i < 50; i++) {
    a[i] = (int)(Math.random() * 10000000);
}

【问题讨论】:

  • 取决于你所说的“小”是什么意思
  • 你认为什么是大数?
  • 这是正常情况。如果所有数字都具有相等的分布,则获得数字 > 1000000 的概率为 0.9,而数字
  • 我的意思是,从来没有任何 1-5 位数字。只有6位以上的数字。我可能只是装傻,因为还有很多 6 位以上的数字。我只是想确保我的代码是正确的。谢谢!
  • 您是在问如何使结果偏向于较小的数字,还是只是在确认您的代码是正确的?

标签: java arrays loops random


【解决方案1】:

如果您希望得到一个低于 1000 的数字,则有 1/10000 的机会,即 0.01%。您的代码很好,但这些设置不太可能获得较低的数字

【讨论】:

    【解决方案2】:

    看你怎么称呼小号。

    例如,获得低于 1000 的数字意味着它需要适应低于 0.1% 的区间,因为 1000 它只是 100 万的所有数字的 0.1%。

    另外,请注意,这样您将获得 0 到 999999(含)之间的数字。要获得 1-1000000,您需要添加 1:

    a[i] = (int)(Math.random() * 10000000)+1;
    

    【讨论】:

    • 感谢您的帮助!我只是想多了。
    【解决方案3】:

    是的,大量将占主导地位。那是因为一半的数字超过 500,000。同样,9/10 的数字超过 100,000。所以 9/10 的数字会有六位数。

    【讨论】:

      【解决方案4】:

      [对你的问题有点正交的解决方案]

      您可以考虑的选项之一是在根据您的预期分布添加数字后对数组进行洗牌,这可以是所有数字添加一次/某些数字添加多次/某些素数多次等。

      我个人用它来涵盖一些游戏开发的案例。

      这是一个可以帮助你洗牌的答案:Credits

       List<Integer> solution = new ArrayList<>();
          for (int i = 1; i <= 6; i++) {
              solution.add(i);
          }
       Collections.shuffle(solution);
      

      【讨论】:

        猜你喜欢
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-25
        • 2013-09-24
        • 2018-04-28
        • 2018-09-07
        • 2020-09-05
        • 2021-10-23
        相关资源
        最近更新 更多