Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 更改Kotlin中的循环索引_Loops_For Loop_Kotlin - Fatal编程技术网

Loops 更改Kotlin中的循环索引

Loops 更改Kotlin中的循环索引,loops,for-loop,kotlin,Loops,For Loop,Kotlin,如何修改Kotlin中的循环变量 对于我的特殊情况,我有一个For循环,在这个循环中,对于某些条件,我想跳过下一次迭代: for(i in 0..n) { // ... if(someCond) { i++ // Skip the next iteration } } 但是,当我尝试此操作时,我被告知“无法重新分配val”。您不能更改当前元素,您需要使用while循环: var i = 0 while (i <= n) { // do something

如何修改Kotlin中的循环变量

对于我的特殊情况,我有一个For循环,在这个循环中,对于某些条件,我想跳过下一次迭代:

for(i in 0..n) {
  // ...
  if(someCond) {
    i++ // Skip the next iteration
  }
}

但是,当我尝试此操作时,我被告知“无法重新分配val”。

您不能更改当前元素,您需要使用
while
循环:

var i = 0
while (i <= n) {
    // do something        
    
    if (someCond) {
        i++ // Skip the next iteration
    }

    i++
}
旁注:
范围是包括在内的,因此要循环浏览例如大小
n
的列表,您通常需要
0..(n-1)
,这更简单:使用
0直到n


在您的特定情况下,您可以使用(Kotlin 1.2):

asSequence
将列表转换为
序列
,消除了
过滤器
窗口化
创建新的
列表
(因为它们现在都将返回
序列


如果希望下一对不包含上一对的最后一个元素,请使用
窗口化(2,2,false)

看起来您真正想做的是在列表上迭代大小为2的滑动窗口。如果您使用的是kotlin 1.2或更高版本,则可以使用
List.windowed()
library函数

例如,考虑每一对相邻元素,但是丢弃其中的第二对元素是负的,那么你会这样做:

val list = listOf(1, 2, 3, -4, -5, 6)
list.windowed(2,1).filter { it[1] > 0 }.apply(::println)
哪个会打印出来

[[1, 2], [2, 3], [-5, 6]]

跳过了对[3,-4]和[-4,-5]

请尝试此方法

for ((position, item) in list.withIndex()){
}

在这里,您将获得位置和对象。

手头的任务涉及迭代相邻的元素对……因此循环与索引i和i+1一起工作。如果我发现关于I+1的某些东西,这意味着它不应该再被查看,那么这种情况就会发生。我可能会建议通过将I初始化为-1并使条件(++I@Kricket I添加了一种可能不完全符合您尝试的方法。这样做会在对之间循环,(0,1),(2,3),等等,但这对(1,2)是不起作用的。我必须说,他们使这一点变得不必要的复杂。Imo是Kotlin退步而不是进化的少数几个领域之一。
[[1, 2], [2, 3], [-5, 6]]
for ((position, item) in list.withIndex()){
}