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

Java实现Wordle克隆:重复字母颜色显示异常(红/黄混淆)求助

问题解决:Wordle克隆重复字母颜色错误

你的核心问题是只靠secretWord.contains(userChar)判断黄色,完全没考虑目标词中该字符的剩余可用数量。比如目标词Brain只有1个I,用户输入多个I时,除了正确位置的那个,其他I应该标红色——因为没有多余的I可以匹配了。

解决方案思路

分两轮处理字符,结合字符频率统计:

  1. 第一轮:先标记所有位置正确的绿色字符,同时减少对应字符在目标词中的剩余可用次数。
  2. 第二轮:处理非绿色字符,若该字符在目标词中还有剩余可用次数,标黄色并再次减少次数;否则直接标红色。

修改后的完整代码

do {
    userInput = input.nextLine().toUpperCase(); // 转大写匹配目标词的大小写

    if (userInput.length() > 5) {
        System.out.println("Invalid Guess, word is too long");
    } else if (userInput.length() < 5) {
        System.out.println("Invalid Guess, word is too short");
    } else {
        // 统计目标词中每个A-Z字符的出现次数
        int[] charCount = new int[26];
        for (int i = 0; i < secretWord.length(); i++) {
            char c = secretWord.charAt(i);
            charCount[c - 'A']++;
        }

        // 第一轮:标记绿色匹配,更新剩余可用次数
        char[] resultFlags = new char[5];
        for (int i = 0; i < 5; i++) {
            char userChar = userInput.charAt(i);
            char secretChar = secretWord.charAt(i);

            if (userChar == secretChar) {
                resultFlags[i] = 'G'; // G代表绿色匹配
                charCount[userChar - 'A']--; // 已匹配,减少可用次数
            } else {
                resultFlags[i] = 'U'; // U代表未处理
            }
        }

        // 第二轮:处理黄色/红色字符
        for (int i = 0; i < 5; i++) {
            if (resultFlags[i] == 'G') {
                System.out.print(GREEN + userInput.charAt(i) + RESET);
                continue;
            }

            char userChar = userInput.charAt(i);
            if (charCount[userChar - 'A'] > 0) {
                System.out.print(YELLOW + userInput.charAt(i) + RESET);
                charCount[userChar - 'A']--; // 消耗一次匹配机会
            } else {
                System.out.print(RED + userInput.charAt(i) + RESET);
            }
        }

        System.out.println();

        if (userInput.equals(secretWord)) {
            correct = true;
        }

        guessCounter++;
    }
} while (guessCounter < maxGuess && !correct);

关键逻辑说明

  • 字符频率统计:用charCount数组记录目标词中每个字母的出现次数,比如Brain中的I对应charCount['I'-'A']初始值为1。
  • 绿色优先处理:先处理位置正确的字符,确保这些匹配优先占用字符的可用次数,避免后续重复字符错误地被标为黄色。
  • 剩余次数判断:第二轮处理时,只有当字符还有剩余可用次数时才标黄色,否则直接标红色,完美解决重复字母的颜色错误问题。

比如测试场景:目标词Brain,用户输入iiiii,第一轮会把第4个I标为绿色,同时charCount['I'-'A']减为0;第二轮处理其他I时,因为剩余次数为0,所以全部标红色,符合预期。

内容的提问来源于stack exchange,提问作者John Heck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:33:19