【问题标题】:Golang Printing no needed valuesGolang 打印不需要的值
【发布时间】: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 []intfor i := 0; i &lt; 3; i++。或者,如果您想使用make(),则将值分配给没有append() 的索引,例如mySlice[i] = mySlice_var.
  • 非常感谢!工作过
  • @icza 的评论是实际答案,for i := 0; i &lt; 3; i++ 这可以更改为无限循环,因此程序将仅在用户输入时终止 X
  • 你应该让标题更清楚一点,以便其他搜索相同问题的人
  • 我认为 user123912301812939 试图说你需要先切片 mySlice 的前 3 个数组,然后制作 len(mySlice) + 3。它至少对我有用。

标签: go slice


【解决方案1】:

希望这是您想要的打印方式! (迭代切片,只打印非零值),试试这个!

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)
//Iterating Over Slice , and printed only non zero values
                for _,v := range mySlice{
                        if v != 0 {
                                fmt.Printf("%v",v)
                        }
                }
                fmt.Println("")

        }

}

【讨论】:

    【解决方案2】:
    mySlice := make([]int, 3)
    

    它很好地初始化一个切片,它的大小是3,然后附加3个零来初始化它

    像这样打印:

    fmt.Println(mySlice)
    fmt.Println("len: ", len(mySlice))
    fmt.Println("cap: ", cap(mySlice))
    
    [0 0 0]
    len:  3
    cap:  3
    

    你只能初始化 init cap

    mySlice := make([]int, 0, 3)
    
    fmt.Println(mySlice)
    fmt.Println("len: ", len(mySlice))
    fmt.Println("cap: ", cap(mySlice))
    
    []
    len:  0
    cap:  3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 2017-04-05
      • 2011-10-12
      • 1970-01-01
      • 2020-05-31
      • 1970-01-01
      相关资源
      最近更新 更多