【发布时间】:2020-06-18 22:40:13
【问题描述】:
我是 GoLang 的新手,正在尝试编写这个程序 -
程序应该写成一个循环。在进入循环之前,程序应该创建一个大小(长度)为 3 的空整数切片。在每次通过循环期间,程序都会提示用户输入要添加到切片中的整数。程序将整数添加到切片中,对切片进行排序,并按排序顺序打印切片的内容。切片的大小必须增加以容纳用户决定输入的任意数量的整数。只有当用户输入字符“X”而不是整数时,程序才应该退出(退出循环)。
所以我的代码是 -
package main
import (
"fmt"
"sort"
"strconv"
)
func main() {
mySlice := make([]int, 3)
var input string
for i := 0; i < len(mySlice); i++ {
fmt.Println("Please enter a number")
fmt.Scanln(&input)
if input == "X" {
break
}
mySlice_var, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Wrong input")
continue
}
// mySlice[i] = mySlice_var
mySlice = append(mySlice, mySlice_var)
// mySlice[i] = mySlice_var
sort.Ints(mySlice)
fmt.Println(mySlice)
}
}
如果我先输入 4,然后输入 5,然后输入 1,它会打印我
Please enter a number
4
[0 0 0 4]
Please enter a number
5
[0 0 0 4 5]
Please enter a number
1
[0 0 0 1 4 5]
看起来打印和排序都可以,但是我如何去掉前三个“0”? 谢谢!
【问题讨论】:
-
如果你正在使用
append(),请不要使用make(),append追加到末尾并且不使用分配的空间。使用var mySlice []int和for i := 0; i < 3; i++。或者,如果您想使用make(),则将值分配给没有append()的索引,例如mySlice[i] = mySlice_var. -
非常感谢!工作过
-
@icza 的评论是实际答案,
for i := 0; i < 3; i++这可以更改为无限循环,因此程序将仅在用户输入时终止X -
你应该让标题更清楚一点,以便其他搜索相同问题的人
-
我认为 user123912301812939 试图说你需要先切片 mySlice 的前 3 个数组,然后制作 len(mySlice) + 3。它至少对我有用。