Hangman游戏输入限制功能异常,寻求代码调试帮助
修复Hangman游戏的输入校验逻辑问题
我看到你在实现Hangman游戏的输入校验时遇到了逻辑漏洞,导致原本的校验规则可以被轻易绕过。咱们一步步拆解问题,然后修复代码:
现存的核心问题
你的guess方法里有几个关键逻辑错误,直接导致了校验失效:
- 赋值而非比较:
while (Supercontroll = true)这里是把true赋值给变量,不是判断它是否等于true;后面的while (Supercontroll=false);也是错误的赋值操作,完全打乱了循环逻辑。 - 字符校验未实时更新:
Charactercontroll只在方法开头初始化了一次,当用户重新输入新内容后,你没有更新这个变量,导致后续的非字母校验一直用第一次输入的字符,完全失效。 - 冗余混乱的循环嵌套:内部多余的while循环完全没必要,反而让逻辑变得混乱不堪。
修正后的代码
下面是修复好的guess方法,同时优化了代码结构,让逻辑更清晰直观:
private static char guess(String previousGuesses) { Scanner keyboard = new Scanner(System.in); char userLetter; // 无限循环直到输入符合要求 while (true) { System.out.print("Gissa en bokstav: "); String userInput = keyboard.next().toUpperCase(); // 校验输入长度是否为1 if (userInput.length() != 1) { System.out.println("Du får bara skriva en bokstav, försök igen!"); continue; } userLetter = userInput.charAt(0); // 校验是否为字母 if (!Character.isLetter(userLetter)) { System.out.println("Detta är inte en bokstav, försök igen!"); continue; } // 校验是否已经猜过这个字母 if (previousGuesses.contains(String.valueOf(userLetter))) { System.out.println("Du har redan gissat på denna bokstav, försök igen!"); continue; } // 所有校验通过,返回字母 return userLetter; } }
关键修改说明
- 简化循环结构:用
while (true)创建无限循环,直到输入符合要求才返回结果,逻辑更直观,避免了嵌套混乱。 - 实时更新校验字符:每次用户输入后立即提取字符并校验,彻底解决了旧字符残留的问题。
- 用
continue跳过无效输入:当某条校验失败时,直接回到循环开头重新获取输入,代码可读性更强。 - 修正比较逻辑:去掉了所有错误的赋值操作,所有判断都使用正确的条件比较。
- 添加输入提示:增加了
System.out.print("Gissa en bokstav: "),让用户明确知道需要进行输入,提升交互体验。
另外建议把主方法里的previousLetters变量名改成previousGuesses,和方法参数名保持一致,代码会更规范。
这样修改后,输入校验就会严格生效:用户必须输入单个大写字母,不能重复猜过的字符,也不能输入非字母内容。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

