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

Java统计字符串中每个字母出现次数的代码结果错误,如何排查?

代码存在两处核心错误:

  • 存取的键类型不匹配,导致每次查询都返回null
    你调用map.get(A.charAt(i))时传入的是char类型的键,但put的时候存的是String.valueOf(A.charAt(i))生成的字符串类型的键。HashMap判断键相等时会同时校验类型,字符'a'和字符串"a"是完全不同的键,因此每次get都会返回null,永远只会执行值设为1的分支,这是输出所有值都为1的直接原因。你可以统一用Character作为键的类型,也可以在get时也将字符转为String,保证存取的键类型一致即可。
  • 计数逻辑错误,没有对已有次数做累加
    就算修复了键类型的问题,你else分支中写的是map.put(..., i+1),这里的i是循环的索引,不是累计的次数,正确写法应该是取已有的值value加1后存入。

修正后的代码参考:

import java.util.HashMap;

public class ConsecutiveCharacters {
    public static String solve(String A, int B) {
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < A.length(); i++) {
            char c = A.charAt(i);
            Integer value = map.get(c);
            if(value == null){
                map.put(c, 1);
            } else {
                map.put(c, value + 1);
            }
        }
        System.out.println(map); 
        String text = "i feel good";
        return text;
    }

    public static void main(String[] args) {
        solve("aabbccd",2);
    }
}

运行后输出结果为{a=2, b=2, c=2, d=1},和预期一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:24:04