除了第二个 else-if 语句外,所有条件都有效,如何纠正这个问题?

问题描述 投票:0回答:4

我正在学习 Java,但我不知道是什么导致我的代码无法读取 else-if 条件 (i == 5)

int i;    
for (i = 1; i <= 5; i++) {
    int guess = scanner.nextInt();
    System.out.println("Attempt: " + i +"/5");
    if (guess < numberToGuess) {
        System.out.println("Higher");
    } else if (guess > numberToGuess) {
            System.out.println("Lower");
    } else if (i == 5) {
        System.out.println("You failed! The correct answer is " + numberToGuess);
    } else {
        System.out.println("You won! Your answer is " + numberToGuess + " which is correct!");
        break;
    }

当我运行代码并尝试通过达到 int i 的最大数量(即 5)来使游戏失败时,第二个 else if 语句应该出现,但它不起作用。

我只是不明白为什么它没有读取 (i==5) 条件,除此之外所有其他条件都有效。

java if-statement equality
4个回答
0
投票

if-else 语句的工作原理是这样的:当任何一个语句得到满足时,其余的语句将被忽略。以你的为例。

if (guess < numberToGuess) {
    System.out.println("Higher");
} else if (guess > numberToGuess) {
    System.out.println("Lower");
} else if (i == 5) {
    System.out.println("You failed! The correct answer is " + numberToGuess);
} else {
    System.out.println("You won! Your answer is " + numberToGuess + " which is correct!");
    break;
}

即使

i == 5
,如果满足
guess < numberToGuess
guess > numberToGuess
中的任何一个,则包括
(i == 5)
在内的其余语句将被忽略。

要解决此问题,只需添加

i == 5
作为要检查的第一个条件,因为如果满足
i == 5
,我们无论如何都不应该考虑猜测。

我还猜测如果游戏结束你想跳出循环,所以我还添加了一个

break
语句。

if (i == 5) {
    System.out.println("You failed! The correct answer is " + numberToGuess);
    break;
} else if (guess < numberToGuess) {
    System.out.println("Higher");
} else if (guess > numberToGuess) {
    System.out.println("Lower");
}  else {
    System.out.println("You won! Your answer is " + numberToGuess + " which is correct!");
    break;
}

0
投票

所以,看起来是这样,因为在检查是否处于正确的循环条件之前,需要检查变量

... 
if (guess < numberToGuess) {
            System.out.println("Higher");
        } else if (guess > numberToGuess) {
                System.out.println("Lower");
        } 
....

已执行。因此,要修复该错误,只需将检查 i == 5 移至第一个分支子句即可。代码应该如下所示

if (i == 5) {
    System.out.println("You failed! The correct answer is " + numberToGuess);
} else if (guess > numberToGuess) {
    System.out.println("Lower");
} else if (guess < numberToGuess) {
     System.out.println("Higher");
} else {
    System.out.println("You won! Your answer is " + numberToGuess + " which is correct!");
    break;
}

这样可以先检查循环条件,然后输入条件


0
投票

这就是

if/else if/else
的工作原理,您的值将低于或高于猜测,因此第2个条件的一个将为真,然后不会检查其他条件

首先设置停止条件

int nb_tries = 5;
for (i = 1; i <= nb_tries; i++) {
    System.out.print("Attempt: " + i + "/" + nb_tries + " => ");
    int guess = scanner.nextInt();

    if (i == nb_tries) {
        System.out.println("You failed! The correct answer is " + numberToGuess);
    } else if (guess < numberToGuess) {
        System.out.println("Higher");
    } else if (guess > numberToGuess) {
        System.out.println("Lower");
    } else {
        System.out.println("You won! Your answer is " + numberToGuess + " which is correct!");
        break;
    }
}

0
投票

使用 if-else 语句时的拇指规则是 无论哪个条件 最早会满足,它将进入该声明并且 之后它将执行 if-else 条件之外的代码。

所以在你的情况下,if-else 语句的工作原理是这样的:当任何一个 的陈述得到满足,其余的被忽略。拿 以你为例。

if (guess < numberToGuess) {
     System.out.println("Higher"); } else if (guess > numberToGuess) {
     System.out.println("Lower"); } else if (i == 5) {
     System.out.println("You failed! The correct answer is " + numberToGuess); } else {
     System.out.println("You won! Your answer is " + numberToGuess + " which is correct!");
    break; }

即使 i == 5,如果任一猜测 < numberToGuess or guess > numberToGuess 满足,它将执行其中一个而不是 我==5。 所以只要想想你想要给予更多优先级的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.