【问题标题】:While loop not working according to the condition in Java根据Java中的条件,while循环不工作
【发布时间】:2020-12-30 11:28:37
【问题描述】:

我正在尝试构建一个数字猜谜游戏,其中有一个带有 2 个条件的 while 循环。然而,即使在这 2 个条件中的 1 个变为 false 之后,即使我有 ||,循环也会继续进行。这些条件之间的运算符。此外,如果我清除了 while 循环的第一个条件,那么第二个条件就像我想要的那样完美,但如果它存在,那么我知道为什么它不会停止。这是我的代码:

import java.util.Random;
import java.util.Scanner;

public class NumberGuess {
public static void main(String args[]) {
    Random num = new Random();
    int number = 1 + num.nextInt(10);
    Scanner inp = new Scanner(System.in);
    boolean guessed = false;
    System.out.println("Welcome to Number guess!");
    int guess_count = 5;

    while(guessed == false || guess_count > 0 ) {
        System.out.print("Enter your guess: ");
        int input = inp.nextInt();

        if(input == number) {
            System.out.println("You guessed it right!");
            guessed = true;
        }
        else {
            System.out.println("Nope!");
            guessed = false;
            guess_count--;
            System.out.println("Guesses left: " + guess_count);
        }
    }


}
}

当计数器低于 0 时,循环也会继续进行,但我不希望这样。 请告诉我我哪里错了。

【问题讨论】:

  • 如果我正确理解了您想要实现的目标,我认为您应该使用 &&(而不是 ||)。
  • 您需要更好地阐明您所期望的行为。要退出循环,您需要 guessedtrue 并且 guess_count 是零或更小。如果最后的猜测是错误的,你将guessed 设置为假(在else 分支中),因此即使guess_count 为零或更小,你也会留在循环中。这是你想要的吗?
  • @Franco,谢谢我现在做对了。

标签: java while-loop


【解决方案1】:

您不需要 OR 运算符。您需要的是一个 AND 运算符。表示您的条件应该是(guessed == false && guess_count > 0 )

为什么?

因为 OR 条件运算符在条件为真时起作用,在您的情况下,如果用户无法猜测 5 次,那么您的 guessed 变量仍然为假,而您的 guess_count 则更少比零,所以你的一个条件是真实的。 AND 运算符检查这两个条件。

【讨论】:

  • @Anonymous 不客气!继续学习和快乐编码。 :)
  • 如果对您有帮助,请将答案标记为已接受! :)
【解决方案2】:

while 循环的条件应从 OR || 更改为 AND &&。目前,|| 将允许执行guessed == false guess_count > 0。只有其中一个条件为真,while 循环才能继续执行。

while(guessed == false && guess_count > 0 ) {

更改为 AND && 意味着如果数字猜对了,guessed 现在将是 truewhile 循环将在该迭代后停止。当guess_counter 降至零以下时,我没有收到任何错误。再试一次以确定。

【讨论】:

    【解决方案3】:

    考虑像这样修改你的循环:

    
            while(guess_count > 0 ) {
                System.out.print("Enter your guess: ");
                int input = inp.nextInt();
    
                if(input == number) {
                    System.out.println("You guessed it right!");
                    break;
                }
                else {
                    System.out.println("Nope!");
                    guessed = false;
                    guess_count--;
                    System.out.println("Guesses left: " + guess_count);
                }
            }
    

    或者像这样修改你的条件:

    while(!guessed && guess_count > 0 ) {
    

    【讨论】:

      【解决方案4】:

      您可以通过将|| 替换为&& 来更正您的代码。当您有guess_count 递减来检查猜测次数时,为什么要使用额外的标志变量。猜到的数字等于输入后,程序将终止。这是简单的实现:

      while(guess_count-->0) {
          System.out.print("Enter your guess: ");
          int input = inp.nextInt();
          if(input == number) {
              System.out.println("You guessed it right!");
              guessed = true;
              break; // The user has already guessed the number no need to guess more
          }
          else
              System.out.println("Nope!\nGuesses left: " + guess_count);
      

      【讨论】:

        猜你喜欢
        • 2023-03-26
        • 2015-09-29
        • 2016-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-23
        相关资源
        最近更新 更多