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

Scala中使用HashMap时出现类型不匹配错误的原因是什么?

问题解答
  • for 循环里的i确实是Int类型,不是迭代器:0 until s.length返回的是Range集合,遍历得到的每个元素都是下标类型的Int,你的这个猜测不成立。
  • 类型不匹配报错的根源是可变HashMap的操作写法错误:
    你声明的是scala.collection.mutable.HashMap,本身支持原地修改,你写的hashMapName = hashMapName + (s.charAt(i), i)存在语法问题:+运算符要求传入单个键值对二元组,你写的(s.charAt(i), i)会被编译器识别为两个独立入参,不符合方法签名要求,才触发类型不匹配报错。

对于可变HashMap,更推荐直接用+=方法添加元素,不需要重新赋值,还可以把var改成val减少不必要的变量声明:

// 仅修复类型问题的写法
else hashMapName += (s.charAt(i) -> i)

另外你当前的代码逻辑和firstUniqChar要求的「返回第一个只出现一次的字符的下标」不符,你现在的逻辑是遇到第一个重复字符就返回前一位下标,无法得到正确结果,修正后符合要求的完整代码如下:

import scala.collection.mutable.HashMap

object Solution {
    def firstUniqChar(s: String): Int = {
        val charCount = HashMap[Char, Int]()
        // 第一轮遍历统计所有字符出现次数
        for (c <- s) {
            charCount.update(c, charCount.getOrElse(c, 0) + 1)
        }
        // 第二轮遍历找第一个出现次数为1的下标
        for (i <- 0 until s.length) {
            if (charCount(s(i)) == 1) return i
        }
        -1
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:06:03