2017-02-12 2 views
0

Почему этот код всегда возвращает ноль:Float возврата в ноль golang

package main 

import "fmt" 

func main() { 
    var index_of_array int 
    fmt.Scan(&index_of_array) 
    var arr = make([]int, index_of_array) 
    for i := 0; i < len(arr); i++ { 
     fmt.Scan(&arr[i]) 
    } 

    positive := 0 
    negative := 0 
    zero_ := 0 
    for _, arr_v := range arr { 
     if arr_v > 0 { 
      positive++ 
     } else if arr_v < 0 { 
      negative++ 
     } else if arr_v == 0 { 
      zero_++ 
     } 
    } 

    fmt.Printf("%f ", float32(positive/len(arr))) 
    fmt.Printf("%f ", float32(negative/len(arr))) 
    fmt.Printf("%f ", float32(zero_/len(arr))) 

} 

я имею в виду для вывода

десятичного, представляющие из доли положительных чисел в массиве. Десятичный знак, представляющий долю отрицательных чисел в массиве. Десятичное представление доли нулей в массиве.

Пример ввода

-4 3 -9 0 4 1

Пример вывода

0,500000

0,333333

0,166667

, но в моем коде на выходе, как это с тем же входом

0,000000

0,000000

0,000000

+2

Трудно ответить на это, если вы не вводите вводимые вами данные и вывод приложения –

+4

Поскольку 'float32 (zero_/len (arr))' сначала делит int на int, который дает вам нуль и затем вы преобразуете это значение в float32 0. Это должно быть 'float32 (zero _)/float32 (len (arr))' –

ответ

0

Я сделал некоторые изменения в свой код и он должен работать, как вы ожидали:

package main 

import (
    "fmt" 
    "bufio" 
    "os" 
    "strconv" 
) 

func main() { 
    scanner := bufio.NewScanner(os.Stdin) 
    fmt.Print("Enter the lenght of the array: ") 
    scanner.Scan() 
    index_of_array, err := strconv.Atoi(scanner.Text()) 
    if err != nil { 
     panic("Errroor!") 
    } 

    arr := make([]int, index_of_array) 

    for i := 0; i < len(arr); i++ { 
     fmt.Printf("Enter value number %d: ", i+1) 
     scanner.Scan() 
     arr[i], err = strconv.Atoi(scanner.Text()) 
     if err != nil { 
      panic("Error 2!") 
     } 
    } 

    positive := 0 
    negative := 0 
    zero_ := 0 
    for _, arr_v := range arr { 
     if arr_v > 0 { 
      positive++ 
     } else if arr_v < 0 { 
      negative++ 
     } else if arr_v == 0 { 
      zero_++ 
     } 
    } 

    fmt.Println("Array entered: ", arr) 
    fmt.Printf("There are %d positive number(s) of %d in the array. Fraction: %.6f\n", positive, len(arr), float64(positive)/float64(len(arr))) 
    fmt.Printf("There are %d negative number(s) of %d in the array. Fraction: %.6f\n", negative, len(arr), float64(negative)/float64(len(arr))) 
    fmt.Printf("There are %d zero(s) of %d in the array. Fraction: %.6f\n", zero_, len(arr), float64(zero_)/ float64(len(arr))) 

} 

вы можете запустить его на repl.it

И вы можете использовать его как этот пример:

Enter the lenght of the array: 6 
Enter value number 1: -4 
Enter value number 2: 3 
Enter value number 3: -9 
Enter value number 4: 0 
Enter value number 5: 4 
Enter value number 6: 1 
Array entered: [-4 3 -9 0 4 1] 
There are 3 positive number(s) of 6 in the array. Fraction: 0.500000 
There are 2 negative number(s) of 6 in the array. Fraction: 0.333333 
There are 1 zero(s) of 6 in the array. Fraction: 0.166667 
+1

благодаря этой работе: D –

+0

Добро пожаловать. Полянка, что мой ответ помогает вам. –

0

Во-первых, первая переменная вы получаете от пользователя длина массива не index ... Во-вторых, вы должны запросить пользователя при запросе ввода пользователя следующим образом:

package main 

import "fmt" 

func main() { 
    var length int 
    fmt.Print("Please enter the length of the array: ") 
    fmt.Scan(&length) 

    var arr = make([]int, length) 
    for i := 0; i < len(arr); i++ { 
    fmt.Printf("Please enter the value at index %d of the array: ", i) 
    fmt.Scan(&arr[i]) 
    } 

    fmt.Println("You entered the array: ", arr) 

    positive := 0 
    negative := 0 
    zero := 0 
    for _, arr_v := range arr { 
    if arr_v > 0 { 
     positive++ 
    } else if arr_v < 0 { 
     negative++ 
    } else if arr_v == 0 { 
     zero++ 
    } 
    } 

    fmt.Printf("There are %d postive numbers in the array\n", int32(positive)) 
    fmt.Printf("There are %d negative numbers in the array\n", int32(negative)) 
    fmt.Printf("There are %d zeroes in the array", int32(zero)) 
} 

Пример:

Please enter the length of the array: 4 
Please enter the value at index 0 of the array: 7 
Please enter the value at index 1 of the array: 0 
Please enter the value at index 2 of the array: -9 
Please enter the value at index 3 of the array: 8 
You entered the array: [7 0 -9 8] 
There are 2 postive numbers in the array 
There are 1 negative numbers in the array 
There are 1 zeroes in the array 

Попробуйте here!

+0

i означает вывод Десятичный знак, представляющий долю положительных чисел в массиве. Десятичное представление доли отрицательных чисел в массиве. Десятичное представление доли нулей в массиве. Пример ввода -4 3 -9 0 4 1 Пример вывода 0,500000 0.333333 0,166667 но в моем коде на выходе, как это с тем же входом 1,000000 0,000000 0,000000 –

+0

@DavitHermansyah i'v обновил свой ответ. Посмотрите. –

Смежные вопросы