【问题标题】:How to generate three unequal numbers? [duplicate]如何生成三个不相等的数字? [复制]
【发布时间】:2020-02-15 10:34:02
【问题描述】:

这里是数字生成:

for( int i=0; i<3; i++) {
    int randomNumbers = random.nextInt(10) + 1; 
}

在这里我可以收到相同的数字。

例如:5,7,5;

但我只需要收到不同的号码:5,1,9

是否有可能用一些小代码或者我应该为它写一些方法?

【问题讨论】:

  • 做一个while循环,检查你是否已经生成了那个数字。如果没有,请增加您的计数器

标签: java arrays for-loop jvm set


【解决方案1】:

您可以使用仅包含唯一值的Set

Set<Integer> randomInts = new HashSet();
while(randomInts.size() < 3) {
    randomInts.add(random.nextInt(10) + 1);
}

当然,您需要面对过采样,但如果性能不是最重要的,这种方法很容易扩展。

【讨论】:

    【解决方案2】:

    这是一种避免rejection sampling 的方法:生成一个最多 10 的数字、一个最多 9 和最多 8 的数字。通过递增来避免重复。这保证了均匀分布。

    int a = random.nextInt(10) + 1;
    int b = random.nextInt(9) + 1;
    if(b >= a) { b++; }
    int c = random.nextInt(8) + 1;
    if(c >= (a > b ? b : a)) { c++; }
    if(c >= (a > b ? a : b)) { c++; }
    

    【讨论】:

    • 有点短,不确定是好是坏:c &gt;= a || c &gt;= bc &gt;= a &amp;&amp; c &gt;= b
    【解决方案3】:

    在我看来,使用 while 循环可以生成具有不同数字的随机数。使用while循环检查该数字是否较早生成,如果是则生成新数字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-17
      相关资源
      最近更新 更多