提问人:Chase Makes Art 提问时间:7/25/2023 最后编辑:The KNVBChase Makes Art 更新时间:7/25/2023 访问量:43
为什么 Java while 循环在满足需求时没有结束?[复制]
Why is Java while loop not ending when requirements met? [duplicate]
问:
我正在尝试创建一个 while 循环,该循环会迭代,直到人们键入猫或狗。然后,该程序将继续传输宠物的信息。根据我的打印测试,当他们输入猫或狗时,它会更改变量,但循环并没有结束。
默认情况下,petType 变量设置为空字符串。
String petType = "";
while(petType != "cat" || petType != "dog") {
System.out.println("Dog or cat? ");
petType = fetch.next().toLowerCase();
System.out.println("You typed " + petType);
}
System.out.println("type: " + petType);
我试图在循环中休息一下:
while(petType != "cat" || petType != "dog") {
System.out.println("Dog or cat? ");
petType = fetch.next().toLowerCase();
System.out.println("You typed " + petType);
break;
}
System.out.println("type: " + petType);
但这导致循环结束,即使答案是错误的。将断点放在大括号外返回错误。
我也尝试过:
boolean canBoard = false;
while(canBoard = false) {
System.out.println("Pet type? ");
petType = fetch.next().toLowerCase();
System.out.println("You typed " + petType);
if(petType == "cat" || petType == "dog") {
canBoard = true;
}
}
System.out.println("type: " + petType);
但是,程序将布尔值设置为 true,不带输入和返回类型:,没有 petType 输出。
我试过改变 ||to &&,因为这是类似问题的修复。它继续循环。
在我的最终测试中,我回到了原来的循环,并将输入更改为“cat”;而不是允许用户输入。这导致了无限循环。键入 dog 或 cat 会导致循环继续,在 && 循环中键入 dog cat 会导致循环重复两次,然后才允许输入。
我不知所措。
答:
您面临的问题与 while 循环中的条件有关。条件 petType != “cat” ||petType != “dog” 的计算结果始终为 true,因为 petType 不能同时是 “cat” 和 “dog”。因此,循环将无限期地持续下去。
要解决此问题,您需要在循环条件中使用逻辑 AND (&&) 运算符而不是逻辑 OR (||) 运算符。此外,在比较字符串时,您应该使用 equals() 方法而不是 ==,因为 == 检查的是引用相等性,而不是字符串的内容。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner fetch = new Scanner(System.in);
String petType = "";
while (!petType.equals("cat") && !petType.equals("dog")) {
System.out.println("Dog or cat? ");
petType = fetch.next().toLowerCase();
System.out.println("You typed " + petType);
}
System.out.println("Type: " + petType);
}
}
现在,循环将继续询问宠物类型,直到用户键入“猫”或“狗”。一旦用户输入“猫”或“狗”,循环将退出,程序将继续进入您收集宠物信息的下一部分。equals() 方法确保正确比较字符串的内容,并且循环的行为符合预期。
评论
a != b || a != c
b != c