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

Kotlin中使用mutableMap出现键对应值不符合预期问题排查

问题根因

代码的核心错误是共用全局count变量统计所有元素的频次,没有为每个键单独维护出现次数,逻辑完全错位:

  • 遇到已存在的键时,累加的全局count根本不是当前键的出现次数,而是之前所有操作累计出的混乱数值
  • 遇到新键时,直接把全局count重置为1,会直接冲掉之前其他元素的计数状态
修正方案

正确逻辑应该是每次遍历到元素时,直接读取Map中当前元素对应的旧计数,加1后更新存储,不需要额外的全局计数变量:

var mapNums = mutableMapOf<Int, Int>()
val nums = arrayOf(34,28,11,21,3,34,8,7,34,7,31,7,3,28,18)

for (n in nums) {
    // 键不存在时默认取0,加1后更新
    mapNums[n] = mapNums.getOrDefault(n, 0) + 1
}

println(mapNums)
// 输出:{34=3, 28=2, 11=1, 21=1, 3=2, 8=1, 7=3, 31=1, 18=1},和实际频次完全匹配

兼容原有判断逻辑的修正版

如果不想使用getOrDefault,沿用你原来的分支判断写法也可以,需要把计数逻辑限定在当前键的已有值范围内:

var mapNums = mutableMapOf<Int, Int>()
val nums = arrayOf(34,28,11,21,3,34,8,7,34,7,31,7,3,28,18)

for (n in nums) {
    if (mapNums.containsKey(n)) {
        // 直接读取当前键已有的计数加1,不使用全局count
        mapNums[n] = mapNums[n]!! + 1
    } else {
        // 首次出现直接设为1
        mapNums[n] = 1
    }
}

println(mapNums)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:03