为什么Java的while循环在满足需求后没有结束?

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

我正在尝试创建一个 while 循环,该循环会迭代直到用户输入 cat 或 dogs。然后,程序将继续收集宠物的信息。根据我的打印测试,当他们输入 cat 或dog 时,它会更改变量,但循环不会结束。

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 输出。

我尝试改变||到 && 因为这是类似问题的修复。它继续循环。

对于我的最终测试,我返回到原始循环并将输入更改为“cat”;而不是允许用户输入。这导致了无限循环。输入dog 或cat 会导致循环继续,而在&& 循环中输入dog cat 会导致循环在允许输入之前重复两次。

我很茫然。

java while-loop infinite-loop
1个回答
0
投票

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

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