我正在学习 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) 条件,除此之外所有其他条件都有效。
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;
}
所以,看起来是这样,因为在检查是否处于正确的循环条件之前,需要检查变量
...
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;
}
这样可以先检查循环条件,然后输入条件
这就是
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;
}
}
使用 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。 所以只要想想你想要给予更多优先级的逻辑。