请问这段代码为什么没有任何输出?
按理说在 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)
}
}
1
Norths 2023-06-23 17:15:37 +08:00
数组的第一个不是写的 false 吗
|
2
ClarkAbe 2023-06-23 17:17:03 +08:00 via Android
你先去把任意一个语言的循环关键字教程看一遍...
|
3
Ericcccccccc 2023-06-23 17:17:20 +08:00
我估计你想要的是
for i := 0; i < len(visit); i++ { if visit[i] fmt.Printf("%d\n", i) } |
4
nirvam 2023-06-23 17:19:14 +08:00
看 for 那行,想想 visit[i]是 false 的时候,会发生什么?
|
5
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) } } ``` |
6
n0bug OP 哦。。。 是我疏忽了。。
感谢各位,结贴了。 |
7
MFWT 2023-06-23 17:22:51 +08:00
展开条件
你猜猜 i < 6 && visit[0] 的值是什么? |
8
realpg 2023-06-23 17:53:29 +08:00
|
9
hzzhzzdogee 2023-06-23 18:00:11 +08:00
be nice, guys
|
10
mengdodo 2023-06-24 16:06:07 +08:00
for 循环体内接 if 判断不好吗,非得一行解决所有?
|
11
Crazypointer 2023-06-24 16:41:47 +08:00
代码压行压出 bug 了
|