【问题标题】:Random numbers in a while loopwhile循环中的随机数
【发布时间】:2014-03-13 12:05:14
【问题描述】:

我正在使用 Eclipse IDE 处理 Java 项目。现在,我想要实现的是我想要 3 个不同的随机数,它们将使用 Random() 函数生成。我希望它们介于 0 到 3 个值之间,包括 0、1 和 2。我有这个小算法可以生成不同的值。

    Random rnd = new Random();
    rand1=rnd.nextInt(3);
    rand2=rand1;
    rand3=rand1;
    while(rand2==rand1){
        rand2=rnd.nextInt(3);
    }
    while(rand3==rand1){
        rand3=rnd.nextInt(3);
    }

但目前,我的代码仍会生成 (1, 0, 0) 或 (2, 1, 1) 之类的值。我找不到原因,感谢您的帮助。

【问题讨论】:

  • 第二个while循环需要while(rand3 == rand1 || rand3 ==rand2),否则第三个数字可以等于第二个,就像你的例子一样。实际上,为什么不将第三个设置为不是第一个或第二个的呢?
  • 谢谢!这就是我要找的:)

标签: java eclipse random


【解决方案1】:

您可以将所有可能的值放在一个列表中,使用Collections.shuffle(list); 对其进行随机播放,然后首先读取您需要的n 值。

【讨论】:

    【解决方案2】:

    那里的代码不符合您的规范。第一个循环将在 rand2 != rand1 时终止,第二个循环将在 rand3 != rand1 时终止。

    三元组 (1,0,0) 满足这些条件,即 1 != 0 和 1 != 0(同样适用于 (2,2,2))。您可能需要一个额外的条件,以确保 rand3 != rand2:

    Random rnd = new Random();
    rand1=rnd.nextInt(3);
    rand2=rand1;
    rand3=rand1;
    while(rand2==rand1){
        rand2=rnd.nextInt(3);
    }
    while(rand3==rand1 || rand3 == rand2){
        rand3=rnd.nextInt(3);
    }
    

    【讨论】:

      【解决方案3】:

      这是因为您检查了第二个和第三个随机数是否与第一个不同。您不检查 rand2 和 rand3 是否也不同。 您可以通过这种方式编辑最后一个 while:

      while(rand3==rand1 || rand3 == rand2){
          rand3=rnd.nextInt(3);
      }
      

      【讨论】:

        【解决方案4】:

        您不检查 rand2 和 rand3 是否相等。此外,如果三个随机数不应该彼此相等,您可以让第二个数字在最后两种可能性之间进行选择,并将第三个数字强制为剩下的一个值。从技术上讲,您的代码没有结束是可能的。 ;)

        【讨论】:

          【解决方案5】:

          您并不真正想要随机数 - 您真正想要的是随机返回六个排列之一

          • 0、1、2
          • 0、2、1
          • 1、0、2
          • 1、2、0
          • 2、0、1
          • 2、1、0

          【讨论】:

            猜你喜欢
            • 2020-12-15
            • 2016-06-11
            • 2016-12-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-11-30
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多