Kotlin问题:遍历53元素ArrayList时Log.i仅输出两次0..52
问题分析与解决
你这问题其实一眼就能看出症结——你在循环里打印的是整个parts.indices范围对象,而不是当前的循环变量x!
为什么会出现这个问题?
看你写的代码:
for(x in parts.indices){ Log.i("INFO", parts.indices.toString()) }
每次循环执行时,你调用的是parts.indices.toString(),这个方法返回的是整个索引范围的字符串(比如0..52),而不是当前循环到的x值。哪怕你把循环条件换成x in 0 until parts.size,只要打印的还是整个范围对象,输出结果自然不会变。
至于你说相同写法在其他类里正常,大概率是其他类的循环里打印的是循环变量x,而不是整个范围对象~
修正后的代码
只需要把打印内容换成x的字符串形式就行:
for(x in parts.indices){ Log.i("INFO", x.toString()) }
这样就会依次输出0、1、2……一直到52,总共53次,完全符合你的预期。
另外,Kotlin里还有更简洁的遍历索引的方式,推荐试试:
- 带索引遍历元素(如果需要同时用到元素的话):
parts.forEachIndexed { index, _ -> Log.i("INFO", index.toString()) }
- 直接重复指定次数(更直观):
repeat(parts.size) { index -> Log.i("INFO", index.toString()) }
内容的提问来源于stack exchange,提问作者K.W.
相关产品推荐
相关产品推荐

