【问题标题】:Remember Old Random Numbers? Java [closed]还记得旧的随机数吗? Java [关闭]
【发布时间】:2014-09-11 00:35:32
【问题描述】:

为了防止在我的随机数生成器中出现重复,我想创建一个 if 语句来测试我的随机数 (x) 是否与 x 的任何其他先前值相同。如果是,则返回并重新开始循环。

如何让我的代码记住 x 之前的所有值?

伪代码:

if (x == previous value of x) {
   return;
}

【问题讨论】:

  • 这是你的作业吗?
  • 完全错了。如果您担心随机数生成器,请运行顽固的测试以找出重复周期。
  • 你会推荐什么来测试重复值?
  • @Win 如果是为了好玩,我发布了我的答案
  • 使用随机数生成器,在重复发生之前有足够长的周期。

标签: java random numbers generator


【解决方案1】:

说明:例如,您可以制作一个包含 8 个数字的列表,然后将列表随机排列,以便随机生成您想要的。

代码:

   Integer[] array = new Integer[100];
    for (int i = 0; i < 100; i++) {
        array[i] = i+1;
    }
    List<Integer> list = Arrays.asList(array);
    Collections.shuffle(list);
    for (int i = 0; i < list.size(); i++) {
        System.out.print(list.get(i) + " ");
    }

输出:

88 25 24 15 92 87 14 100 68 98 91 32 28 22 74 37 10 90 44 77 94 52 34 86 72 99 46 71 36 26 69 55 82 79 19 78 60 49 70 85 33 66 45 57 61 9 51 76 3 42 16 29 84 93 58 2 53 97 6 17 13 43 12 56 35 96 83 40 38 59 50 5 41 65 11 23 73 4 47 89 1 81 21 80 63 48 20 27 64 54 18 75 30 62 39 31 7 8 67 9

【讨论】:

  • 有没有办法制作一个列表,类似于数组,包含从 1 到 100 的值,而不是随机输入每个值?
  • 与其构建一个数组然后将其转换为List,不如从ArrayList&lt;Integer&gt;开始。
  • @pjs 谢谢你提醒我 :) 但 op 只想要 100 个元素,所以我认为数组是正确的数据结构 :)
  • @Win 发生了什么?你解决了你的问题吗?
【解决方案2】:

使用列表记录 x 的先前值。列表比数组更好,因为如果你想生成更多的随机数,你不需要调整它们的大小。

List<int> randomNumberList = new ArrayList<int>();
randomNumberList.add(randomNumberThatYouGenerated);

然后只需使用 if:

if (randomNumberList.contains(randomNumberThatYouGenerated)) {
    //code
}

【讨论】:

    【解决方案3】:

    使用数组记录x.....的先前值,并检查该数组中的当前值是否..

    【讨论】:

    • 随着价值的增加,性能会越来越差。听起来是一种杀死性能和内存的好方法。
    • 我认为我们可以添加一些优化;最大值 = 1000;布尔数组[1000] = {假}; int x = generate_a_random_number (MAX); if (array[x] == False){ array[x]=Ture;打印 x; }
    • 检查 1000 有什么意义?仍然没有意义。
    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    相关资源
    最近更新 更多