Java开发Hangman猜词游戏时猜中字母后隐藏词不更新问题
Hangman猜词游戏占位符不更新问题修复方案
你遇到的问题由两处代码逻辑错误共同导致,修复方案如下:
错误1:updateWord方法未同步更新结果到类成员变量
updateWord方法末尾生成的newGuess是方法内部局部变量,执行结束后会被直接回收,存储隐藏词的类成员变量guess始终没有被修改,自然不会显示更新后的结果。
修复后的updateWord代码:
public void updateWord(char a) { char [] newWord = new char [word.length()]; for(int i = 0; i<word.length();i++) { if(word.charAt(i)==a) { newWord[i] = a; } else { newWord[i] = guess.charAt(i); } } // 修复:将更新后的字符串赋值给类成员变量guess guess = String.valueOf(newWord); }
错误2:displayGuess方法每次调用都会重置guess为全占位符
现有displayGuess方法每次执行都会清空guess,重新拼接全量占位符。如果是在调用updateWord之后调用displayGuess打印结果,之前的更新结果会被直接覆盖成全占位符。
修复方案:将初始化全占位符的逻辑单独抽离,仅在游戏启动时执行一次,displayGuess仅负责打印当前进度:
// 游戏初始化时仅调用一次,生成初始全占位符隐藏词 public void initGuess() { guess = ""; int length = word.length(); for(int i = 0; i<length;i++) { guess += String.valueOf(symbol); } count++; } // 仅负责打印当前猜测进度 public void displayGuess() { System.out.println("Guess is " + guess); }
调用流程修正
修复后按以下顺序调用即可达到预期效果:
- 游戏启动后调用一次
initGuess生成初始隐藏词 - 用户每次输入猜测字母后调用
updateWord更新进度 - 调用
displayGuess打印当前隐藏词
内容的提问来源于stack exchange,提问作者yeah man12345
相关产品推荐
相关产品推荐

