【问题标题】:Random Number generator to cover all numbers in the set随机数生成器覆盖集合中的所有数字
【发布时间】:2012-07-06 21:45:03
【问题描述】:

我正在编写一个 Android 应用程序,我想生成随机数。

但是,Java 的 RandomGenerator 只给我伪随机数。数字重复,并非所有数字都被覆盖。

我想要一些可以给我不重复数字并覆盖所有数字的东西。我该怎么做?

【问题讨论】:

  • 这不会真的是随机的吧?给定集合,预测下一个数字会越来越容易......
  • 遍历集合怎么样? :)
  • 我认为任何软件随机生成器都会给你“伪随机数”。
  • 即使在真正的随机数生成器中,假定也会发生“数字重复,但并非所有数字都被覆盖”。
  • @Randly:Louis Wasserman:你说得对,但我的用例是为幻灯片实现随机播放。所以,我需要图片不重复,并且需要显示相册中的所有图片。

标签: java random generator


【解决方案1】:

您可以将所有想要的随机值放入 List 并随机播放。

List<Integer> numbers = ...
Collections.shuffle(numbers);

这将以随机顺序为您提供唯一编号。

【讨论】:

  • 这看起来很棒。这是一次性的事情吧?然后我按顺序访​​问列表?
  • 然后您可以按顺序访问列表,以及随机但唯一的对象。如果您也想要任何限制数量,您也可以这样做。
  • 我没有得到限制数部分。能详细点吗?
  • 您只打印每秒一次的数字,因为您每次迭代调用i++ 两次。
  • 我在头疼之后才意识到这一点。谢谢彼得!对不起,愚蠢的错误!
【解决方案2】:

您可以用要循环的数字填充数据结构,然后随机化结构中元素的顺序并一个一个地拉出它们。或者,您可以随机选择索引,并在这些索引处检索元素。无论您做什么(您会选择对特定数据结构更有效的一个),您一定要在抓取该元素时删除它。随着您继续前进,您的数据结构将变得越来越小,直到您收到所有元素并且什么都没有。这也确保您永远不会两次击中相同的数字,因为您已将其从可能的数字池中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多