【问题标题】:What to put as condition in while loop?在while循环中放置什么作为条件?
【发布时间】:2015-01-24 19:09:02
【问题描述】:

我正在编写一个在新行上多次打印 guesses = [random number here from 1-50 inclusive] 直到值大于 48 的方法。一旦它大于 48,我尝试打印它所花费的猜测次数(虽然没有使用扫描仪,但“猜测”是 Math.random 产生的数字)。 这是示例输出:

guess = 43
guess = 47
guess = 45
guess = 27
guess = 49
total guesses = 5

这是我的输出:

guess = 44
guess = 47
guess = 45
guess = 27
total guesses = 4

我得到几乎相同的随机数的原因是因为它是在实践中。

这是我的代码:

public static void makeGuesses(){
    int totalGuesses = 0;
    double randomNumber = (Math.random() * 50 + 1);

    while(randomNumber < 48){
        System.out.print("guess = ");
        System.out.println(randomNumber + 1); 
        randomNumber = (int)(Math.random() * 51);
        totalGuesses++;
    }
        System.out.print("total guesses = " + totalGuesses);   
}

目前,我没有得到所需输出的最后一行。我需要在我的 while 循环中设置什么条件?

【问题讨论】:

    标签: java random methods while-loop numbers


    【解决方案1】:

    您在正确的轨道上,因为您需要转换为 int,但您需要在 生成数字时转换为 int。

    此外,如果您使用当前的实现,您将生成 0 到 50 之间的数字,包括 0 到 50。您希望从 1 到 50 生成,包括在内。您可以通过乘以 50,然后简单地添加 1 来解决此问题。

    int randomNumber = (int) (Math.random() * 50 + 1);
    

    【讨论】:

      【解决方案2】:

      您的第一个 random 不是 int,因为您忘记了演员

      double randomNumber = (int) (Math.random() * 51);
      

      我建议你也将类型设为int

      int randomNumber = (int) (Math.random() * 51);
      

      【讨论】:

        【解决方案3】:

        问题是您的 while 条件检查了一个您尚未打印的数字。如果您使用调试器并单步执行代码,您会注意到这一点。

        int totalGuesses = 0;
        int randomNumber;
        
        while (true) {
          randomNumber = 1 + (int)Math.floor(Math.random() * 50);
          totalGuesses += 1;
          System.out.print("guess = ");
          System.out.println(randomNumber);
          if (randomNumber > 48) break;
        }
        
        System.out.print("total guesses = " + totalGuesses);
        

        抱歉,我的手机无法很好地格式化代码。

        【讨论】:

          【解决方案4】:

          当您需要一次又一次地生成随机数时,您应该使用java.util.Random

              public static void makeGuesses() {
                  int totalGuesses = 0;
                  Random rdm = new Random();
                  int randomNumber;
                  do {
                      randomNumber = rdm.nextInt(50) + 1;
                      System.out.println("guess = " + randomNumber);
                      totalGuesses++;
                  } while (randomNumber < 48);
                  System.out.println("total guesses = " + totalGuesses);
              }
          }
          

          输出:

          guess = 15
          guess = 29
          guess = 26
          guess = 14
          guess = 3
          guess = 1
          guess = 49
          total guesses = 7
          

          【讨论】:

          • 不清楚。最后一行。 "total guesses = ..." 将被打印出来。
          • “猜测 = 49”。我很确定这是我需要更改的 while 循环测试...?
          • 如果你想知道生成的所有随机数,那么你应该使用do-while。我已经编辑了我的答案。看看那个。
          • 它仍然没有打印最后一行...我希望它打印一次大于48的数字,然后停在那里,并返回totalGuesses
          • 你一定是在别处犯了错误。现在我还发布了测试运行的输出。
          猜你喜欢
          • 2016-11-04
          • 2011-07-22
          • 2020-03-11
          • 1970-01-01
          • 2022-12-12
          • 2021-08-17
          • 2021-08-20
          • 1970-01-01
          • 2017-12-07
          相关资源
          最近更新 更多