You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:56:38