Golang Не печатаются необходимые значения - PullRequest
0 голосов
/ 19 июня 2020

Я новичок в GoLang и пытаюсь написать эту программу -

Программа должна быть написана как al oop. Перед вводом l oop программа должна создать пустой целочисленный срез размером (длиной) 3. Во время каждого прохода через l oop программа предлагает пользователю ввести целое число, которое будет добавлено к срезу. Программа добавляет целое число к фрагменту, сортирует фрагмент и печатает содержимое фрагмента в отсортированном порядке. Срез должен увеличиваться в размере, чтобы вместить любое количество целых чисел, которые пользователь решает ввести. Программа должна завершиться (выход из l oop) только тогда, когда пользователь вводит символ «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»? Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 июня 2020
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

вы можете инициализировать только инициализация

mySlice := make([]int, 0, 3)
fmt.Println(mySlice)
fmt.Println("len: ", len(mySlice))
fmt.Println("cap: ", cap(mySlice))
[]
len:  0
cap:  3
0 голосов
/ 19 июня 2020

Надеюсь, вы хотите его напечатать именно так! (Итерация по фрагменту и печать только ненулевых значений), попробуйте это!

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

        }

}
...