如何在Kotlin中无限遍历JSONArray且避免‘Val cannot be reassigned’错误?
Kotlin实现JSONArray无限遍历的解决方法
你原来的代码存在两个核心问题:
- Kotlin中
for (i in 0 until length)循环里的i是只读的val,无法重新赋值,因此会触发“Val cannot be reassigned”错误; - 循环条件为
0 until arrayValue.length(),i的最大值是arrayValue.length() - 1,所以i.equals(arrayValue.length())的判断永远不会生效。
以下是两种可行的实现方案:
方法一:使用while循环手动控制索引
用var定义可修改的索引变量,通过取模运算自动实现循环遍历:
var i = 0 val arrayLength = arrayValue.length() while (true) { // 执行你的操作,例如获取当前元素 val currentItem = arrayValue.get(i) // ... 编写你的业务逻辑 // 索引自增,到达数组末尾后自动重置为0 i = (i + 1) % arrayLength }
方法二:生成无限序列配合for循环
通过generateSequence创建无限循环的索引序列,更契合Kotlin的函数式编程风格:
val arrayLength = arrayValue.length() for (i in generateSequence(0) { (it + 1) % arrayLength }) { // 执行你的操作 val currentItem = arrayValue.get(i) // ... 编写你的业务逻辑 // 若需要终止无限循环,可在此添加break条件 // if (stopCondition) break }
内容的提问来源于stack exchange,提问作者Android_Dev
相关产品推荐
相关产品推荐

