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

如何在Kotlin中编写含双索引的for循环?

在Kotlin中实现Java风格的多变量控制循环

问题背景

给定Java中如下形式的多变量控制for循环:

for (int i = 0, j = 0; i < first.length && j < last.length; i++, j++) {
    if (first[i] != last[j]) break;
    sb.append(first[i]);
}

需要在Kotlin中编写逻辑等价的循环。

方式一:while循环(最贴合原逻辑)

Kotlin没有Java风格的多初始化条件for循环,最直接的等价实现是使用while循环手动维护变量:

var i = 0
var j = 0
val first = strs[0].toCharArray()
val last = strs[strs.lastIndex].toCharArray()
val sb = StringBuilder()

while (i < first.size && j < last.size) {
    if (first[i] != last[j]) break
    sb.append(first[i])
    i++
    j++
}

方式二:for循环配合范围,同步维护第二个变量

如果更习惯for循环的写法,可以遍历第一个变量的索引范围,同时同步更新第二个变量:

val first = strs[0].toCharArray()
val last = strs[strs.lastIndex].toCharArray()
val sb = StringBuilder()
var j = 0

for (i in first.indices) {
    if (j >= last.size || first[i] != last[j]) break
    sb.append(first[i])
    j++
}

这里需要额外判断j是否超出数组长度,确保和原循环的终止条件完全一致。

方式三:利用zip函数(简化元素遍历场景)

如果你的核心需求是遍历两个数组的对应元素,Kotlin的zip函数可以大幅简化代码。zip会自动遍历到两个数组中较短的那个的末尾,和原循环的终止条件匹配:

val first = strs[0].toCharArray()
val last = strs[strs.lastIndex].toCharArray()
val sb = StringBuilder()

for ((charFromFirst, charFromLast) in first.zip(last)) {
    if (charFromFirst != charFromLast) break
    sb.append(charFromFirst)
}

注意这种写法适用于只需要元素而非索引的场景,若需要使用索引,建议选择前两种方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:45:30