You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java游戏循环逻辑异常:非yes/no输入导致程序意外终止

解决Java游戏重玩逻辑的输入无效问题

嘿,我明白你遇到的这个闹心问题了——用户输入非yes/no的内容时,程序提示重新输入后直接终止,确实挺影响体验的。咱们来一步步拆解问题,然后把它搞定!

问题根源

你已经摸到了关键:外层的while (weArePlaying == 1)循环只在游戏运行状态(weArePlaying=1)时执行。当用户输入无效内容,你把weArePlaying设为2,这时候循环条件不满足,直接跳出循环,程序自然就终止了,根本没机会让用户重新输入有效的选项。

解决方案

核心思路很简单:让循环在用户明确选择退出(weArePlaying=0)之前一直运行,而不是只在游戏状态下运行。同时调整重玩输入的逻辑,确保用户输入无效时,程序会持续提示直到得到正确的yes/no。

修改后的代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.HashSet;

public class GameMain {
    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("C:\\Users\\mmkp1\\Documents\\listofmovies.txt");
        int attempts = 10;
        Scanner scanner = new Scanner(System.in);
        int weArePlaying = 1;
        HashSet<Character> guessedLetters = new HashSet<>();

        // 关键改动:只要不是退出状态,循环就持续运行
        while (weArePlaying != 0) {
            // 游戏主逻辑区块(保留你原来的游戏代码)
            if (weArePlaying == 1) {
                // ... 这里放你的猜电影、字母判断等游戏核心代码 ...
                // 游戏结束后切换到重玩询问状态
                weArePlaying = 2;
            }

            // 重玩询问逻辑区块
            if (weArePlaying == 2) {
                System.out.println("Do you want to play again? (yes/no)");
                String anotherGame = scanner.nextLine();

                // 处理空输入(比如之前操作残留的换行符)
                while (anotherGame.trim().isEmpty()) {
                    anotherGame = scanner.nextLine();
                }

                if (anotherGame.equalsIgnoreCase("no")) { // 忽略大小写更友好
                    weArePlaying = 0;
                } else if (anotherGame.equalsIgnoreCase("yes")) {
                    weArePlaying = 1;
                    attempts = 10;
                    guessedLetters.clear();
                } else {
                    // 输入无效时,保持询问状态,不改变weArePlaying的值
                    System.out.println("Invalid input! Please enter 'yes' or 'no'.");
                }
            }
        }

        if (weArePlaying == 0) {
            System.out.println("Thank you for playing :)");
        }
        scanner.close(); // 记得关闭Scanner释放资源
    }
}

关键改动说明

  1. 外层循环条件调整:把while (weArePlaying == 1)改成while (weArePlaying != 0),这样只要用户没选择退出,循环就会继续运行,不管是在游戏中还是在等待重玩输入。
  2. 无效输入的处理:当用户输入无效内容时,不再修改weArePlaying的值(本来就是2),而是打印错误提示,让循环在下一次迭代时再次进入重玩询问逻辑,直到用户输入正确选项。
  3. 额外体验优化:用equalsIgnoreCase支持大小写不敏感的输入(比如Yes/NO也能识别),还处理了空输入的情况,避免因为之前操作残留的换行符导致读取空字符串,最后记得关闭Scanner资源。

这样调整后,用户输入无效内容时,程序会一直提示重新输入,不会直接终止,完全符合你的需求!

内容的提问来源于stack exchange,提问作者Merlin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:42:29