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

Java实现双词字符比对游戏出现类型转换报错问题求解

Java字符比对小游戏逻辑修复方案

报错直接原因

incompatible types: char cannot be converted to java.lang.CharSequence 来自两处API用法错误:

  • String.contains() 方法要求传入CharSequence类型参数(即字符串类序列),直接传入char类型的数组元素会触发类型不匹配
  • isUsed.contains(i) 逻辑完全错误:该方法作用是判断参数代表的字符序列是否存在于字符串中,传入int类型的索引i既不符合参数类型要求,也实现不了“判断字符是否已被匹配占用”的需求

原代码另外还有3个逻辑漏洞:

  • 用字符串拼接存储已匹配字符,无法处理目标词含重复字符的场景(比如目标词是AAB,猜测词是AAA时,第三个A不能判定为存在,因为目标词仅含2个A)
  • PRESENT分支中向isUsed拼接的是索引i的数字转字符(比如i=1会拼接字符'1'),和实际匹配的字符无关,逻辑完全失效
  • 没有做输入长度校验,两个输入词长度不一致时会触发数组越界

正确实现思路

  • 放弃用字符串存储已使用字符,改用长度26的int数组(对应大写A-Z共26个字母)统计目标词中未被位置正确匹配的字符剩余数量
  • 分两轮遍历:第一轮先标记所有位置完全匹配的CORRECT结果,未匹配的目标字符计入计数数组;第二轮再处理非正确位,如果对应字符剩余计数大于0则判定为PRESENT,同时扣减对应计数,否则判定为ABSENT
  • 单char转字符串用String.valueOf(c),避免类型转换错误

可直接运行的修正代码

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Quiz {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine().trim().toUpperCase();
        String q = br.readLine().trim().toUpperCase();
        
        if (s.length() != q.length()) {
            System.out.println("输入的两个单词长度必须一致");
            return;
        }

        char[] sArray = s.toCharArray();
        char[] qArray = q.toCharArray();
        // 索引0对应A,1对应B...25对应Z,存储每个字符剩余可匹配次数
        int[] charLeftCount = new int[26];
        String[] result = new String[s.length()];

        // 第一轮:标记所有位置正确的匹配项
        for (int i = 0; i < s.length(); i++) {
            if (qArray[i] == sArray[i]) {
                result[i] = "CORRECT " + qArray[i];
            } else {
                // 未被位置匹配的字符计入剩余计数
                charLeftCount[sArray[i] - 'A']++;
            }
        }

        // 第二轮:处理位置错误、不存在的情况
        for (int i = 0; i < q.length(); i++) {
            if (result[i] != null) {
                continue;
            }
            int charIndex = qArray[i] - 'A';
            if (charLeftCount[charIndex] > 0) {
                result[i] = "PRESENT " + qArray[i];
                charLeftCount[charIndex]--;
            } else {
                result[i] = "ABSENT " + qArray[i];
            }
        }

        // 逐行输出结果
        for (String line : result) {
            System.out.println(line);
        }
    }
}

效果验证

输入目标词APPLE、猜测词PAPER时,输出如下,完全符合规则:

PRESENT P
CORRECT A
PRESENT P
CORRECT E
ABSENT R

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 13:15:35