Golang play.golang.org示例代码解析:md_8FsByrf0
Golang play.golang.org示例代码解析:md_8FsByrf0 创建了一个程序,根据输入的金额输出相应字符串。但不知为何只有默认情况有效。不确定如何让它给出准确结果
你在每个边界条件上都犯了同样的错误。100不小于100,90既不小于也不大于90,等等。
这不是我在讨论的内容…
你尝试过输入 90 或 80 吗?
它只给我第一个案例。我也将 maxScore 的声明放在了包作用域。没有变化
这与变量的作用域无关,而是与你所赋的值有关。尝试将其值更改为95,这样你就能看到如果满足switch语句的第一个条件
func main() {
fmt.Println("hello world")
}
嗯,游乐场不允许交互,你既不能指定参数,也不能输入任何内容。
只需尝试使用一些示例值调用你的函数。
10, 65, 75, 85, 95, 70, 80, 90, 100
我需要通过命令行传递数字,因此无需手动声明。这在我的IDE上运行完美,但在Playground上不行(这种情况似乎经常发生)
你将maxScore设置为100,执行了所有的switch分支。请将maxScore改为95后重新运行…
func main() {
maxScore := 100
switch {
case maxScore > 90:
fmt.Println("优秀")
case maxScore > 80:
fmt.Println("良好")
case maxScore > 70:
fmt.Println("中等")
default:
fmt.Println("需要改进")
}
}
同意@Nobbz的观点,程序持续失败的原因在于没有任何输入值,导致始终执行default分支。
我对你的源码进行了修改,使用了整数切片(https://play.golang.org/p/ZnDQC1MmdXx)。这样你就可以在playground上进行测试了。
func main() {
// 示例代码
values := []int{1, 2, 3}
for _, v := range values {
select {
case <-time.After(time.Second):
fmt.Println(v)
default:
fmt.Println("default case")
}
}
}
在您提供的代码中,问题出在switch语句的语法使用上。Go语言的switch语句默认不需要在每个case后添加break,但您使用了fallthrough关键字,这会导致控制流继续执行下一个case,从而总是进入default分支。以下是解析和修正后的代码:
问题分析:
- 原始代码中,每个
case都使用了fallthrough,这导致无论输入金额是多少,最终都会执行到default分支。 fallthrough会强制继续执行下一个case,而不是退出switch块。
修正后的代码:
package main
import "fmt"
func main() {
var amount int
fmt.Print("Enter amount: ")
fmt.Scan(&amount)
switch {
case amount < 1000:
fmt.Println("Amount is less than 1000")
case amount >= 1000 && amount < 5000:
fmt.Println("Amount is between 1000 and 5000")
case amount >= 5000 && amount < 10000:
fmt.Println("Amount is between 5000 and 10000")
default:
fmt.Println("Amount is 10000 or more")
}
}
关键修改:
- 移除了所有
fallthrough语句,这样每个case在匹配后会自动退出switch。 - 调整了
case条件,确保它们互斥且覆盖所有范围(例如,使用amount >= 1000 && amount < 5000来明确区间)。
示例输出:
- 输入
500,输出:Amount is less than 1000 - 输入
3000,输出:Amount is between 1000 and 5000 - 输入
7500,输出:Amount is between 5000 and 10000 - 输入
15000,输出:Amount is 10000 or more
这个修正确保了switch语句根据输入金额正确匹配并输出对应的字符串,而不是总是进入default分支。


