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释放资源 } }
关键改动说明
- 外层循环条件调整:把
while (weArePlaying == 1)改成while (weArePlaying != 0),这样只要用户没选择退出,循环就会继续运行,不管是在游戏中还是在等待重玩输入。 - 无效输入的处理:当用户输入无效内容时,不再修改
weArePlaying的值(本来就是2),而是打印错误提示,让循环在下一次迭代时再次进入重玩询问逻辑,直到用户输入正确选项。 - 额外体验优化:用
equalsIgnoreCase支持大小写不敏感的输入(比如Yes/NO也能识别),还处理了空输入的情况,避免因为之前操作残留的换行符导致读取空字符串,最后记得关闭Scanner资源。
这样调整后,用户输入无效内容时,程序会一直提示重新输入,不会直接终止,完全符合你的需求!
内容的提问来源于stack exchange,提问作者Merlin
相关产品推荐
相关产品推荐

