这个 Go 的 for 循环条件判断有什么问题

325 天前
 n0bug

请问这段代码为什么没有任何输出?

按理说在 i = 2 和 4 的时候,visit [i] = true, printf 应该打印出 i 。

然而 go run main.go 的结果没有任何输出。

package main

import (
    "fmt"
)

func main() {
    visit := []bool{false, false, true, false, true, false}

    for i := 0; i < len(visit) && visit[i]; i++ {
        fmt.Printf("%d\n", i)
    }
}
1515 次点击
所在节点    Go 编程语言
11 条回复
Norths
325 天前
数组的第一个不是写的 false 吗
ClarkAbe
325 天前
你先去把任意一个语言的循环关键字教程看一遍...
Ericcccccccc
325 天前
我估计你想要的是
for i := 0; i < len(visit); i++ {
if visit[i]
fmt.Printf("%d\n", i)
}
nirvam
325 天前
看 for 那行,想想 visit[i]是 false 的时候,会发生什么?
dobelee
325 天前
很容易找到问题,for 的条件打印出来是 false ,根本没进去。
fmt.Println(0 < len(visit) && visit[0]) // false

正确的写法:
```
for i, val := range visit {
if val {
fmt.Println(i, val)
}
}
```
n0bug
325 天前
哦。。。 是我疏忽了。。
感谢各位,结贴了。
MFWT
325 天前
展开条件

你猜猜

i < 6 && visit[0]

的值是什么?
realpg
324 天前
技术不到家,非得整花活,俗称人菜瘾大,而且写这种代码被优化概率很高

↓这么写,是个人就能看明白
@Ericcccccccc #3
hzzhzzdogee
324 天前
be nice, guys
mengdodo
324 天前
for 循环体内接 if 判断不好吗,非得一行解决所有?
Crazypointer
324 天前
代码压行压出 bug 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951048

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX