Kotlin自定义SymmetricalHash类增强循环类型不匹配问题求助
自定义SymmetricalHash的toStr函数错误解析与解决
错误原因
这个错误的意思很直白:你在for循环里遍历的是Int类型的内容,但循环变量却被定义成了List类型(简单说就是循环期望拿到List,实际拿到的是Int)。比如你可能写了类似for (bucket: List<*> in buckets.indices)的代码——buckets.indices是桶数组的索引集合,每个元素都是Int,但你把循环变量bucket声明成了List,这就完全不匹配了。
解决方法
先明确你的哈希表结构:自定义HashMap一般是数组+列表的结构,数组buckets里的每个元素是存储键值对的列表(因为你键值是同一泛型,所以列表里是Pair<K,K>类型)。
正确遍历写法示例
假设你的SymmetricalHash里有这个成员变量:
private val buckets: Array<MutableList<Pair<K, K>>>
那toStr函数可以这么写:
fun toStr(): String { val result = StringBuilder("{") // 遍历每个桶(每个桶是一个存储键值对的List) for (bucket in buckets) { // 遍历桶里的每一组键值对 for ((key, value) in bucket) { result.append("$key=$value, ") } } // 去掉末尾多余的逗号和空格 if (result.length > 1) { result.delete(result.length - 2, result.length) } result.append("}") return result.toString() }
如果你是遍历索引出错
如果之前你是通过索引遍历桶,错误写法是这样:
// 错误:遍历的是Int类型的索引,却把变量声明成List for (bucket: MutableList<Pair<K,K>> in buckets.indices) { // ... }
改成下面两种写法都可以:
- 直接遍历桶数组(推荐上面的写法)
- 把循环变量改成Int类型,再通过索引取桶:
for (index in buckets.indices) { val bucket = buckets[index] // 接着遍历bucket里的键值对 }
核心要点
- 先搞清楚你要遍历的对象是什么类型:是桶数组(元素是List),还是数组的索引(元素是Int)
- 循环变量的类型必须和遍历对象的元素类型完全匹配,不能乱套
内容的提问来源于stack exchange,提问作者13YearOldPleaseBeFriendly
相关产品推荐
相关产品推荐

