Как выйти из цикла без запуска скрипта ниже - PullRequest
0 голосов
/ 21 января 2020

Я хочу выйти из второго цикла в первый цикл (например, перерыв), но после перерыва я не хочу печатать fmt.Println("The value of i is", i). Как работает алгоритм?

package main

import "fmt"

func main() {
    for i := 0; i < 2; i++ {
        for j := 0; j < 4; j++ {
            if j == 2 {
                fmt.Println("Breaking out of loop")
                break
            } else {
                fmt.Println("j = ", j)
            }
        }
        fmt.Println("The value of i is", i)
    }
}

1 Ответ

1 голос
/ 21 января 2020

Редактировать: Вы отредактировали свой код, поэтому вот отредактированный ответ для этого.

Чтобы продолжить внешний l oop из внутреннего (ломая внутренний l oop и пропуская остальную часть внешнего l oop), вы должны продолжить внешнее l oop.

. Чтобы обратиться к внешнему l oop с помощью оператора continue, используйте метку:

outer:
    for i := 0; i < 2; i++ {
        for j := 0; j < 4; j++ {
            if j == 2 {
                fmt.Println("Breaking out of loop")
                continue outer
            } else {
                fmt.Println("j = ", j)
            }
        }
        fmt.Println("The value of i is", i)
    }

Будет выведено (попробуйте на Go Детская площадка ):

j =  0
j =  1
Breaking out of loop
j =  0
j =  1
Breaking out of loop

Оригинальный ответ:

break всегда разрывается от самого внутреннего l oop (точнее, for, switch или select), поэтому после этого внешний l oop продолжит свою следующую итерацию.

Если вы есть вложенные циклы и из внутреннего l oop, который вы хотите оторвать от внешнего l oop, вы должны использовать метки:

outer:
    for i := 0; i < 2; i++ {
        for j := 0; j < 4; j++ {
            if j == 2 {
                fmt.Println("Breaking out of loop")
                break outer
            }
            fmt.Println("The value of j is", j)
        }
    }

Это выведет (попробуйте на Go Детская площадка ):

The value of j is 0
The value of j is 1
Breaking out of loop
...