如何仅使用一个for循环在kotlin中执行此Java代码?
for(int i=0, j=0; i < 6 && j < 6; i++, j+=2) {
// code here
}
答案 0 :(得分:7)
没有办法遍历多个变量。在这种情况下,最简单的操作是:
for (i in 0..3) {
val j = i * 2
}
在更一般的情况下,您可以将其重写为while
循环:
var i = 0
var j = 0
while (i < 6 && j < 6) {
// code here
i++
j += 2
}
答案 1 :(得分:0)
yole的答案几乎肯定是最简单,最有效的方法。
但是您可能会看到的另一种方法是将序列压缩在一起,例如:
for ((i, j) in sequence{ yieldAll(0 until 6) }.zip(sequence{ yieldAll(0 until 6 step 2) })) {
// code here
}
使用实用程序功能更具可读性,例如:
fun <T, U> seqs(it1: Iterable<T>, it2: Iterable<U>)
= sequence{ yieldAll(it1) }.zip(sequence{ yieldAll(it2) })
for ((i, j) in seqs(0 until 6, 0 until 6 step 2)) {
// code here
}
效率较低(最初创建Iterable,Range和Sequences,然后为每个迭代创建Pair)。但这与问题中的代码完全等效。并且由于它在一个地方定义了每个范围,因此至少使它们非常清晰。
(我认为这需要Kotlin 1.3。可能有更简单和/或更通用的方法;如果可以改进,请随时进行编辑!)
答案 2 :(得分:0)
我非常感谢gidds的回答
但是还有另一种简便的方法可以为两个变量
在循环中编写 forfor ( (i, j) in (0..6).zip(0..6 step 2)){
println("values are: $i, $j")
}
以上代码按预期运行得很好
您还可以轻松地为三个变量在循环中编写 for 。请参见以下代码。
在这段代码中,我试图实现三个变量系列
// 1.2.3 + 2.3.4 + 3.4.5 + ... + n(n+1)(n+2)
fun main(args: Array<String>) {
// taking int input from console
val number: Int = readLine()!!.toInt()
var sum: Int = 0
// here second variable jPair becomes pair because of second nested zip
for ( (i, jPair) in (1..number).zip((0..number + 1).zip(2..number + 2))) {
println("values are: $i, ${jPair.first}, ${jPair.second}")
sum += (i * jPair.first * jPair.second)
}
println("Series sum is: $sum")
}
现在,让我们实现四个用于循环的变量
在下面的代码中,我试图实现四个变量系列
// 1.3.5.7 + 3.5.7.9 + 5.7.9.11 + ... + n(n+2)(n+4)(n+6)
fun main(args: Array<String>) {
// taking int input from console
val number: Int = readLine()!!.toInt()
var sum: Int = 0
// here second variable iPair becomes pair because of first nested zip
// here second variable jPair becomes pair because of second nested zip
for ( (iPair, jPair) in ((1..number step 2).zip(3..number + 2 step 2)).zip((5..number + 4 step 2).zip(7..number + 6 step 2))) {
println("values are: ${iPair.first}, ${iPair.second}, ${jPair.first}, ${jPair.second}")
sum += (iPair.first * iPair.second * jPair.first * jPair.second)
}
println("Series sum is: $sum")
}
这样,我们可以轻松地为in循环实现多个变量。