为何这段Go语言代码的count值为2而非预期的5?
问题原因分析
你的循环条件i <= num-len(mySlc)存在动态变化的问题——每次调用append后,mySlc的长度都会增加,导致num-len(mySlc)的值不断变小,循环提前终止。
逐次循环拆解
初始状态:num=5,len(mySlc)=2,count=0,i=0
- 第一次循环:
- 计算条件:
0 <= 5-2=3→ 满足 count变为1,append后len(mySlc)=3
- 计算条件:
- 第二次循环:
- 计算条件:
1 <= 5-3=2→ 满足 count变为2,append后len(mySlc)=4
- 计算条件:
- 第三次循环:
- 计算条件:
2 <= 5-4=1→ 不满足,循环直接结束
- 计算条件:
这就是为什么最终count是2,而不是你预期的5——因为循环的终止条件在每次迭代中都被修改了。
修正方案
如果想要循环执行num - len(mySlc)次(也就是3次,让切片最终长度到5),需要先把循环次数固定下来,避免每次迭代重新计算:
package main import "fmt" func main() { mySlc := []int{1, 2} count := 0 num := 5 // 提前计算需要循环的次数,避免动态变化 loopTimes := num - len(mySlc) fmt.Println(len(mySlc)) fmt.Print("Enter Len:") for i := 0; i < loopTimes; i++ { count++ var eded int fmt.Print("Enter i:") fmt.Scan(&eded) mySlc = append(mySlc, eded) } fmt.Println(mySlc, count) }
这样循环会固定执行3次,最终count会是3,切片长度变为5。如果你的预期是count=5,那可能是误解了循环次数——初始切片长度是2,要让count到5的话,需要循环5次,此时切片长度会变成7,你可以根据需求调整loopTimes的值。
内容的提问来源于stack exchange,提问作者azizovrafael
相关产品推荐
相关产品推荐

