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
相关产品推荐
相关产品推荐

