如何实现Hangman游戏中用户错误输入次数的正确统计?
解决Hangman游戏错误输入次数统计问题
你的核心问题是错误计数逻辑错误:当前代码在遍历单词每个字符时,只要当前字符与猜测字符不匹配就给misses加1,导致一次错误猜测被重复统计(比如单词长度为8,猜错一次会让misses直接加8)。正确逻辑应该是:只有当整个单词里完全没有用户猜测的字符时,才给错误次数加1。
修改步骤:
- 每次获取用户猜测后,初始化一个布尔变量标记本次猜测是否正确
- 遍历单词字符数组时,仅负责匹配字符并更新隐藏数组,同时设置正确猜测的标记
- 遍历结束后,根据标记判断是否需要增加错误次数
修改后的完整代码:
import java.util.Arrays; import java.util.Random; import java.util.Scanner; public class Lab17 { public static void main(String[] args) { Scanner input = new Scanner(System.in); Random r = new Random(); String[] words = {"greetings", "mountain", "school", "horse", "program"}; System.out.println("Would you like to play? y/n: "); String playAgain = input.nextLine(); while (playAgain.equals("y")){ int misses = 0; boolean solved = false; String word = words[r.nextInt(5)]; char[] wordArray = word.toCharArray(); char[] hiddenWordArray = Arrays.copyOf(wordArray, wordArray.length); for (int i = 0; i < word.length(); i++) { hiddenWordArray[i]='*'; } while (!solved){ System.out.print("(Guess) Enter a letter in word "); for (int i = 0; i < word.length(); i++) { System.out.print(hiddenWordArray[i]); } System.out.println(); char guess = input.next().charAt(0); boolean isCorrectGuess = false; // 新增标记变量 for (int i = 0; i < word.length(); i++) { if (guess == wordArray[i]){ hiddenWordArray[i] = guess; isCorrectGuess = true; // 找到匹配字符,标记为正确猜测 } // 移除原else分支,不再在此处计数 } // 遍历结束后判断是否猜错 if (!isCorrectGuess) { misses++; } if (Arrays.equals(hiddenWordArray, wordArray)){ System.out.println("The word is: "+word+". You missed "+misses+" times"); solved = true; } } System.out.println(); System.out.println("Would you like to play again? y/n: "); playAgain = input.next(); } } }
额外优化提示:
- 可添加逻辑防止用户重复猜测同一字符(比如已猜过的正确字符,再次输入时不处理也不计数错误)
- 注意输入大小写问题,可统一将用户输入转为小写后再匹配
内容的提问来源于stack exchange,提问作者Lamarr Freeman
相关产品推荐
相关产品推荐

