高朗打印没有需要的值

问题描述 投票:0回答:1

我是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 "呢,谢谢!我是GoLang新手,想写这个程序--程序应该写成循环。

go slice
1个回答
0
投票

希望这是你想打印的方式 ! (Iterating Over Slice , and printed only non-zero values), try this!

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("")

        }

}

0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.