Как выполнить, если условие внутри цикла - PullRequest
1 голос
/ 06 ноября 2019

Полный новичок на Go здесь, пришедший из Javascript. Я хотел бы сделать основной цикл, с оператором if внутри, однако я не получаю ожидаемых результатов.

package main

import (
    "fmt"
)

func looper(x int) {
    sum := 0
    for sum < 10 {
        if x == sum {
            fmt.Print("Match")
            return
        } else {
            fmt.Println("No Match")
        }
    }
}

func main() {
    looper(8)
}

Я ожидаю, что 'Match' будет напечатан, когда 8 равно значению 'sum' переменной итератора.

Вместо этого я получаю много 'No Match' вместо этого.

Ответы [ 4 ]

2 голосов
/ 06 ноября 2019

Может быть, вы ищете что-то вроде этого:

package main

import (
    "fmt"
)

func looper(x int) {
    for sum := 0; sum < 10; sum++ {
        if x == sum {
            fmt.Print("Match")
            return
        } else {
            fmt.Println("No Match")
        }
    }
}

func main() {
    looper(8)
}
1 голос
/ 06 ноября 2019

Если вы хотите использовать цикл в стиле while, вам просто нужно увеличить переменную sum

package main

import (
    "fmt"
)

func looper(x int) {
    sum := 0
    for sum < 10 {
        if x == sum {
            fmt.Print("Match")
            return
        } else {
            fmt.Println("No Match")
        }
        sum++ //<----------------------------HERE
    }
}

func main() {
    looper(8)
}
1 голос
/ 06 ноября 2019

Основная причина, по которой ваш код не работает, заключается в том, что у вас нет счетчика в цикле for, следовательно, он фактически находится в бесконечном цикле и не завершится.

Формат цикла forкак показано ниже:

for i := 0; i < <some_terminating_value>; i++ {
    do stuff
}

Требование: «Я ожидаю, что« Match »будет напечатано, когда 8 равно значению переменной sum для итератора. Вместо этого я получаю много« No Match »вместо. есть сумма == x и ничего больше, однако ваш код печатает Not Match 7 раз и Match на 8-й итерации.

Если выполнить ваше требование, ваш код должен выглядеть следующим образом:


package main

import (
    "fmt"
    "strconv"
)

func looper(x int) {
    for i := 0; i <= x; i++ {
        if i == x {
            fmt.Print("Value: " + strconv.Itoa(i) + " = Match")
            return
        }
    }
}

func main() {
    looper(8)
}

Если исходить из кода, функция должна выглядеть следующим образом:

package main

import (
    "fmt"
)

func looper(x int) {
    for i := 0; i <= x; i++ {
        if i == x {
            fmt.Print("Match")
            return
        } else {
            fmt.Println("No Match")
        }
    }
}

func main() {
    looper(8)
}
0 голосов
/ 06 ноября 2019

похоже, что ваш цикл имеет только условие, проверьте Циклы и итерации

использование:

for sum := 0; sum < 10; sum++{}
...