Hangman游戏:如何限制用户重复输入同一字母?代码异常求助
你的Hangman重复字母检测问题分析与修复方案
嘿,我看到你在做Hangman猜词游戏时,遇到了重复输入字母的提示无法生效的问题,咱们来拆解下代码里的问题:
核心问题:局部数组无法留存历史输入
你代码里的char array[] = new char[120];是局部变量——每次用户输入字母触发这段逻辑时,都会新建一个全新的数组,之前输入过的字母记录根本存不住!所以不管用户输入多少次同一个字母,这个数组每次都是初始状态,自然永远不会触发array[letterChar] > 1的判断。
修复方案:把数组改成类成员变量
要解决这个问题,你需要把用来记录已输入字母的数组提升为类的成员变量,这样它的生命周期和整个Activity/Fragment一致,能留存所有历史输入记录。
另外还有几个小细节需要优化:
- 增加输入验证:防止用户输入空内容或多个字符,避免
charAt(0)抛出异常 - 统一字母大小写:不然用户输入
A和a会被当成不同字母,导致重复检测失效 - 数组长度设为256:覆盖所有ASCII字符,比120更稳妥,避免超出索引范围
修改后的完整代码示例
首先在你的类(比如Activity)里声明成员变量:
// 用来记录每个字母的输入次数,默认初始值为0 private char[] enteredLetters = new char[256]; // 假设numCorr是统计正确次数的变量,也需要设为成员变量避免每次重置 private int numCorr = 0;
然后是处理输入的逻辑代码:
String letter = enterletter.getText().toString(); // 第一步:验证输入合法性 if (letter.isEmpty() || letter.length() > 1) { Toast.makeText(getApplicationContext(), "请输入单个字母哦!", Toast.LENGTH_LONG).show(); enterletter.setText(""); return; } char letterChar = letter.charAt(0); // 统一转成大写(或小写),消除大小写差异 char normalizedChar = Character.toUpperCase(letterChar); enterletter.setText(""); // 检查是否重复输入 enteredLetters[normalizedChar]++; if (enteredLetters[normalizedChar] > 1) { Toast.makeText(getApplicationContext(), "您已输入过该字母!", Toast.LENGTH_LONG).show(); } else { boolean check = false; for (int i = 0; i < currWord.length(); i++) { if (Character.toUpperCase(currWord.charAt(i)) == normalizedChar) { check = true; charViews[i].setTextColor(Color.BLACK); numCorr++; } } // 这里可以补充猜错的逻辑,比如减少剩余生命值、更新Hangman图形等 }
这样修改后,就能正确检测用户是否重复输入同一个字母,并且触发对应的Toast提示啦!
内容的提问来源于stack exchange,提问作者Cheeseburger
相关产品推荐
相关产品推荐

