Go语言实现冒泡排序时Scan获取动态输入运行报错问题求解
问题原因
- 缺少读取待排序元素的逻辑:你当前代码仅读取了输入的第一个值作为切片长度,没有将后续输入的数字存入切片,切片所有元素都是默认初始值
0,排序逻辑执行的是对全0切片的排序,自然不会得到你期望的结果。 - 输入残留导致shell报错:未被Go程序读取的输入内容会在程序退出后被bash当成命令执行,这就是你看到
bash: 4: command not found错误的原因。
修正后的代码
package main import "fmt" func main() { fmt.Println("请输入待排序数字的总个数(最多10个):") var count int fmt.Scanln(&count) // 限制最大长度为10 if count > 10 { count = 10 } inputSlice := make([]int, count) fmt.Println("请依次输入待排序的数字:") for i := 0; i < count; i++ { fmt.Scan(&inputSlice[i]) } BubbleSort(inputSlice) fmt.Println("排序后的结果:", inputSlice) } func BubbleSort(input []int) { for i := 0; i < len(input)-1; i++ { for j := 0; j < len(input)-i-1; j++ { Swap(input, j) } } } func Swap(input []int, j int) { if input[j] > input[j+1] { input[j], input[j+1] = input[j+1], input[j] } }
使用说明
运行程序后先输入待排序的数字个数,再依次输入对应数量的数字即可得到正确的排序结果,不会再出现shell报错的问题。
内容的提问来源于stack exchange,提问作者shouravRahman
相关产品推荐
相关产品推荐

