原文: https://beginnersbook.com/2019/02/kotlin-continue-expression-with-examples/

continue构造跳过循环的当前迭代并将控制流跳转到循环结束以进行下一次迭代。continue通常与if表达式一起使用,以跳过指定条件的循环的当前迭代。在本指南中,我们将学习cintinue构造和标签。

Kotlin continue循环示例

  1. fun main(args : Array<String>){
  2. for (n in 1..5){
  3. println("before continue, Loop: $n")
  4. if(n==2||n==4)
  5. continue
  6. println("after continue, Loop: $n")
  7. }
  8. }

输出:

Kotlin `continue`表达式 - 图1

正如您在输出中看到的那样println("after continue, Loop: $n")语句没有为循环迭代n == 2n == 4执行,因为在这些迭代中我们使用了此语句之前的continue,它跳过了这些n值的迭代。

但是,您可以观察到在每次迭代时执行的println("before continue, Loop: $n")语句,因为它在遇到Continue之前执行。

基于此,您可以得出结论continue跳过迭代,但它无法跳过continue之前遇到的语句。一旦遇到continue,控制流就跳转到循环的末尾,跳过其余的语句。

让我们再看一个例子

Kotlin continue:显示偶数

  1. fun main(args : Array<String>){
  2. for (n in 1..10){
  3. if(n%2!=0)
  4. continue
  5. println("$n")
  6. }
  7. }

输出:

Kotlin `continue`表达式 - 图2

continue标签

直到现在我们已经学会了continue。让我们了解continue标签。这些标签很酷,基本上它们在我们处理嵌套循环时给予我们更多的控制。

让我们举一个例子,我们首先不使用continue标签,然后我们将采用与continue标签相同的例子。

没有continue标签的嵌套循环示例

在这个例子中,我们有一个嵌套的for循环,我们没有使用标签。当我们不使用标签时,我们没有任何控制,一旦遇到continue,就会跳过内循环的当前迭代。

  1. fun main(args : Array<String>){
  2. for (x in 'A'..'D'){
  3. for (n in 1..4){
  4. if (n==2||n==4)
  5. continue
  6. println("$x and $n")
  7. }
  8. }
  9. }

输出:

  1. A and 1
  2. A and 3
  3. B and 1
  4. B and 3
  5. C and 1
  6. C and 3
  7. D and 1
  8. D and 3

带有continue标签的嵌套循环示例

您可以在上面的示例输出中看到,对于n值 2 和 4,内循环将跳过迭代。让我们说我们想跳过外部for循环的迭代,我们可以在continue标签的帮助下这样做。

  1. fun main(args : Array<String>){
  2. mtloop@ for (x in 'A'..'D'){
  3. for (n in 1..4){
  4. if (n==2||n==4)
  5. continue @myloop
  6. println("$x and $n")
  7. }
  8. }
  9. }

输出:

  1. A and 1
  2. B and 1
  3. C and 1
  4. D and 1

基本上这里发生的是,一旦n值达到 2,控制流就会因为标签而跳到外循环的末尾,并且每次迭代都会发生这种情况。continue标签的语法非常简单,因为您只需要在标签后附加@符号,并且需要在continue语句后附加相同的名称,如上例所示。