Golang中这两段代码有什么区别?
Golang中这两段代码有什么区别? 第一个:
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
var sum int
for i:=0; i<=n; i++ {
switch i%2 {
case 0:
fmt.Println(i, "even!")
case 1:
continue
}
sum += i
}
fmt.Println("Sum =", sum)
}
第二个:
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
var sum int
for i:=0; i<=n; i++ {
switch i%2 {
case 0:
fmt.Println(i, "even!")
case 1:
break
}
sum += i
}
fmt.Println("Sum=", sum)
}
如果可以的话,请根据这个例子简要解释一下 break 和 continue 的含义,谢谢。
更多关于Golang中这两段代码有什么区别?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
我思考了一个乘法运算,9*5=45,但它是如何运作的呢?
更多关于Golang中这两段代码有什么区别?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你运行过不同的代码吗?是否观察到行为上的任何差异?
是的,我不知道这是什么意思。如果我输入9,第一个程序显示的和是20,而第二个程序显示的是45……我想这是乘法运算(?)
20 和 45?对于 9?
我原本期望第一段代码显示总和为 20,第二段代码显示总和为 0……
每个版本打印一个数字后跟“even”的频率是多少?
尽管我现在很难真正推理这段代码。我正使用移动设备,无法运行它。同时,缺少格式使得代码难以阅读……
第五,输出如下:
C:\Users\Ilenia\go\src\esercitazioni\lab5 esempio>go run "es 2.go"
9
0 even!
2 even!
4 even!
6 even!
8 even!
Sum = 45
好的,我首先需要理解 break 在这种情况下的语义。
我最初假设 break 是与循环绑定的,但实际上它是与 switch 绑定的,并且允许存在一个否则就是空的分支。
所以第二个版本只是对 0 到 9 进行求和,而第一个版本中的 continue 会导致当前循环迭代在此处停止,并“继续”下一个迭代,而不执行此后的代码。因此,这里只对 0 到 9 之间的偶数进行求和。
这是第一段代码:
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
var sum int
for i := 0; i <= n; i++ {
switch i % 2 {
case 0:
fmt.Println(i, "even!")
case 1:
continue
}
sum += i
}
fmt.Println("Sum =", sum)
}
这是第二段代码:
package main
import "fmt"
func main() {
var n int
fmt.Scan(&n)
var sum int
for i := 0; i <= n; i++ {
switch i % 2 {
case 0:
fmt.Println(i, "even!")
case 1:
break
}
sum += i
}
fmt.Println("Sum=", sum)
}
这两段代码都实现了预期的功能:一个打印66,另一个打印30。这是因为 break 只会退出 switch 语句,而 continue 会继续执行 for 循环。
这两段代码的核心区别在于 continue 和 break 在 switch 语句中的行为不同。
第一段代码(使用 continue):
- 当
i%2 == 1(奇数)时,执行continue,这会跳过当前循环的剩余部分,直接进入下一次循环迭代。 - 因此,奇数不会执行
sum += i,但循环会继续处理下一个i。 - 最终
sum累加的是所有偶数。
第二段代码(使用 break):
- 当
i%2 == 1(奇数)时,执行break。这里的break属于switch语句,只会跳出switch,而不会跳出for循环。 - 因此,奇数仍然会执行
sum += i,循环也会继续。 - 最终
sum累加的是所有数(包括奇数和偶数)。
实际上,在这个例子中,switch 里的 break 是多余的,因为 switch 默认就会在匹配的 case 执行完后跳出。所以第二段代码的效果等同于删掉整个 switch 语句。
简单来说:
continue跳过本次循环的剩余代码,直接开始下一次循环。break在switch中只跳出switch;在for中才会跳出整个循环。
示例验证:
假设输入 n = 3:
第一段代码输出:
0 even!
2 even!
Sum = 2
(只累加了偶数 0 和 2)
第二段代码输出:
0 even!
Sum= 6
(累加了 0, 1, 2, 3,但只打印了 0 的 “even!”)
关键点: 在 switch 内部,break 并不会影响外层的 for 循环。如果想用 break 跳出外层循环,需要配合标签使用,例如:
loop:
for i := 0; i <= n; i++ {
switch i % 2 {
case 1:
break loop // 跳出整个 for 循环
}
sum += i
}

