【问题标题】:while loop wont stop even when condition requires it to即使条件需要,while循环也不会停止
【发布时间】:2023-03-25 04:34:01
【问题描述】:

我的循环无法识别它需要退出。 任何帮助表示赞赏。

public static void main(String[] args) {
    Scanner kbd = new Scanner(System.in);
    String name;
    int residentLoopNumber = 0;
    boolean ifResidentFound = false;
    boolean ifUserQuit;

    Resident[] residents = new Resident[6];
    residents[1] = new Resident("Kelly Ocean", "72", "female", "102", "C", false);
    residents[2] = new Resident("Sean White", "99", "male", "302", "A", true);
    residents[3] = new Resident("Elias Abiadal", "66", "male", "666", "A", true);
    residents[4] = new Resident("Terry Goldsmith", "94", "male", "471", "B", false);
    residents[5] = new Resident("Sarah Young", "90", "female", "111", "C", true);

    //prompting user to enter resident name
    System.out.print("Please enter a resident's name: ");
    name = kbd.nextLine();

    //checking if user entered exit keyword
    ifUserQuit = ifQuit(name);

    do {

        //checking if entered name matches any in the list.
        for (int i = 1; i < residents.length; ++i) {

            if (residents[i].getName().toLowerCase().equals(name.toLowerCase())) {

                residentLoopNumber = i;
                ifResidentFound = true;
            }
        }

        //loop prompting user to enter name again
        while (!ifResidentFound) {

            System.out.println("<" + name + ">" + " is not on record.");
            System.out.print("Please enter a resident's name: ");
            name = kbd.nextLine();
            ifUserQuit = ifQuit(name);
        }

        for (int i = 1; i < residents.length; ++i) {

            if (residents[i].getName().toLowerCase().equals(name.toLowerCase())) {

                residentLoopNumber = i;
                ifResidentFound = true;
            }
        }

        //displaying resident information
        System.out.print(residents[residentLoopNumber].toString());

    } while (!ifUserQuit);

}

public static boolean ifQuit(String input) {

    return input.toLowerCase().equals("exit");
}

}

如果用户输入“退出”,我的循环应该结束 但是,当输入退出时,我得到了这个输出。有什么想法吗?

请输入居民姓名:exit 没有记录在案。 请输入居民姓名:

【问题讨论】:

    标签: java loops while-loop boolean


    【解决方案1】:

    while 循环中没有任何内容可以更改条件变量。您需要在循环中的某个点设置ifResidentFound = true 以退出它。看起来您需要将 for 循环放入您的 while 循环中。

    【讨论】:

    • 我的 while 循环应该在这种情况下迭代 while (!ifUserQuit); 并且我在每个输入之后都有代码行 ifUserQuit = ifQuit(name); 应该更新“ifUserQuit”的值,它的值来自一个布尔方法“ifQuit(name)”,如果用户输入“退出”@Mish,则设置为返回 true
    • 我认为您误解了此处没有退出哪个循环。 do 循环中的 while 循环是永远不会退出的循环。 ifResidentFound 是你的条件,在那个循环中它永远不会改变。
    • 我的 while 循环不在我的 for 循环内。我的 for 循环甚至在显示输出之前就结束了
    • 你的意思是什么可以为我解释一下?
    • ifResidentFound 与程序的循环无关,它只检查是否在我的对象数组中找到用户
    猜你喜欢
    • 2016-03-14
    • 2020-04-15
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-07
    相关资源
    最近更新 更多