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

2023-06-23 17:12:47 +08:00
 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)
    }
}
1731 次点击
所在节点    Go 编程语言
11 条回复
Norths
2023-06-23 17:15:37 +08:00
数组的第一个不是写的 false 吗
ClarkAbe
2023-06-23 17:17:03 +08:00
你先去把任意一个语言的循环关键字教程看一遍...
Ericcccccccc
2023-06-23 17:17:20 +08:00
我估计你想要的是
for i := 0; i < len(visit); i++ {
if visit[i]
fmt.Printf("%d\n", i)
}
nirvam
2023-06-23 17:19:14 +08:00
看 for 那行,想想 visit[i]是 false 的时候,会发生什么?
dobelee
2023-06-23 17:20:24 +08:00
很容易找到问题,for 的条件打印出来是 false ,根本没进去。
fmt.Println(0 < len(visit) && visit[0]) // false

正确的写法:
```
for i, val := range visit {
if val {
fmt.Println(i, val)
}
}
```
n0bug
2023-06-23 17:22:49 +08:00
哦。。。 是我疏忽了。。
感谢各位,结贴了。
MFWT
2023-06-23 17:22:51 +08:00
展开条件

你猜猜

i < 6 && visit[0]

的值是什么?
realpg
2023-06-23 17:53:29 +08:00
技术不到家,非得整花活,俗称人菜瘾大,而且写这种代码被优化概率很高

↓这么写,是个人就能看明白
@Ericcccccccc #3
hzzhzzdogee
2023-06-23 18:00:11 +08:00
be nice, guys
mengdodo
2023-06-24 16:06:07 +08:00
for 循环体内接 if 判断不好吗,非得一行解决所有?
Crazypointer
2023-06-24 16:41:47 +08:00
代码压行压出 bug 了

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

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

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

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

© 2021 V2EX