为什么 Java while 循环在满足需求时没有结束?[复制]

Why is Java while loop not ending when requirements met? [duplicate]

提问人:Chase Makes Art 提问时间:7/25/2023 最后编辑:The KNVBChase Makes Art 更新时间:7/25/2023 访问量:43

问:

我正在尝试创建一个 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 会导致循环重复两次,然后才允许输入。

我不知所措。

java while-loop 无限循环

评论

0赞 Jack 7/25/2023
should be while(canBoard == false)
1赞 shmosel 7/25/2023
另外,如果 .a != b || a != cb != c

答:

0赞 Derrick W 7/25/2023 #1

您面临的问题与 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() 方法确保正确比较字符串的内容,并且循环的行为符合预期。

评论

1赞 Chase Makes Art 7/25/2023
谢谢!我是编程的新手,真的很挣扎。
0赞 Derrick W 7/25/2023
这很好,我很高兴我能够提供帮助,如果它有效,请给它一个赞成票,这样它就可以在未来帮助其他人