pani c: индекс вне диапазона в Go при попытке доступа к строковому элементу - PullRequest
0 голосов
/ 09 марта 2020

В настоящее время я изучаю, как кодировать в Go, и я застрял с проблемой, которая возникает в строках 43 и 44 моего кода, я пытаюсь преобразовать один элемент "num" и "den" в число так что позже я смогу использовать его для вычисления, которое я хочу, но я получаю следующее сообщение:

panic: runtime error: index out of range

goroutine 1 [running]:
main.iterate_transfer(0x7ffecd96f050, 0x3, 0x7ffecd96f054, 0x3)
        /home/mlg/Programming/project/107transfer_2019/107transfer.go:43 +0x3af
main.main()
        /home/mlg/Programming/project/107transfer_2019/107transfer.go:28 +0xac

Я попытался напечатать len и содержимое строки "den", и оно содержит желаемое значение на правильная позиция, поэтому я не понимаю, почему я не могу получить к ней доступ ни к одному элементу

Я передал "7 * 2 * 6" в num_str и "2 * 4 * 3" в den_str

Мой код:

 34 func iterate_transfer(num_str, den_str string) () {
 35     result := 0.0
 36 
 37     for x := 0.0; x <= 1.00; x += 0.001 {
 38         num := strings.Split(num_str, "*")
 39         den := strings.Split(den_str, "*")
 40         power_num := len(num)
 41         power_den := len(den)
 42         for s := len(num); s > 0; s-- {
 43             num_nb, _ := strconv.Atoi(num[s])
 44             den_nb, _ := strconv.Atoi(den[s])
 45             result += math.Pow(float64(num_nb), float64(power_den)) /     math.Pow(float64(den_nb), float64(power_den))
 46             power_num--
 47             power_den--       
 48         }   
 49         fmt.Println(x, " -> ", result, "\n")
 50     }   
 51 }   

Заранее благодарим за помощь!

1 Ответ

1 голос
/ 09 марта 2020

Встроенный метод len, возвращает размер данного элемента. В связи с тем, что индекс начинается с 0, необходимо:

  1. Проверить, больше ли len больше 0;
  2. Вычесть -1, чтобы получить доступ к индекс
...