while循环没有按照java中的条件工作

pcrecxhr  于 2021-06-27  发布在  Java
关注(0)|答案(4)|浏览(291)

我试图建立一个数字猜测游戏,其中有一个while循环与2个条件。然而,即使在这两个条件中的一个变为false之后,循环也会继续进行,即使在这些条件之间有| |运算符。同样,如果我清除while循环的第一个条件,那么第二个条件就像我想要的那样完美地工作,但是如果它存在,那么idk为什么它不停止。这是我的密码:

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以下时,循环也会继续,但我不想这样。请告诉我哪里错了。

pb3s4cty

pb3s4cty1#

您可以通过替换 ||&& . 为什么要使用一个额外的标志变量,当你有 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);
n3schb8v

n3schb8v2#

考虑如下修改循环:

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 ) {
mznpcxlj

mznpcxlj3#

while循环的条件应该从or改为 || 到一个和 && . 目前 || 将允许执行,如果 guessed == false 或者 guess_count > 0 . 这些条件中只有一个必须为真 while 循环以继续执行。

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

更改为and && 也就是说,如果数字猜对了, guessed 现在是 true 以及 while 循环将在该迭代之后停止。我没有得到任何错误的时候 guess_counter 降到零下。请再试一次。

7gyucuyw

7gyucuyw4#

你不需要or接线员。您需要的是and运算符。意味着你的情况应该是 (guessed == false && guess_count > 0 ) .
为什么?
因为or条件运算符在条件为真时起作用,在您的情况下,如果用户无法猜测5次,则 guessed 变量仍然为false,而 guess_count 小于零,所以你的一个条件是真的。和操作员检查这两种情况。

相关问题