Index out of range почему это происходит?

Пытаюсь решить задачу. Пробовал через range через len(), хардкодил i<3все равно получаю ошибку "index out of range"

package main

import (
	"fmt"
)

func main() {
	a:=[]int32{2,56,4}
	b:=[]int32{7,56,6}
	fmt.Println(compareTriplets(a,b))
}

func compareTriplets(a []int32, b []int32) []int32 {
    scores:=[]int32{}
    for i:= 0; i < 3; i++ {
        if a[i] > b[i]{
            scores[0]++
        }
        if a[i] < b[i]{
            scores[1]++
        }
    }
      return scores
}
  • Вопрос задан
  • 482 просмотра
Решения вопроса 3
@abbaboka
Так нельзя:
scores:=[]int32{}
scores[0]++

score - без размера. Нулевого размера. Вы не можете присвоить ни в первый элемент, как выше написано (нумерация с нуля, поэтому индекс 0 и означает первый элемент) ни в последующие. Этих элементов просто нет.

Нужно или перед использованием указать размер явно, как написал Василий Мельников, есть 2 метода.
или динамически изменять размер через scores = append(scores, newItem). Конкретно для вашего кода - целесообразно через var scores [размер]тип
Ответ написан
BacCM
@BacCM
C++ почти с рождения
У тебя массив/слайс нулевого размера
Размер можно задать или фиксированный
var scores [2]int32

или с помощью make, уже не фиксированный массив а динамический - слайс.
Плюс в том, что у него можно увеличивать размер при необходимости

var scores  []int32
scores  = make([]int32, 2, 2)

// Или сразу
scores  := make([]int32, 2, 2)
Ответ написан
Комментировать
0xD34F
@0xD34F
Массив scrores у вас пустой, замените

scores:=[]int32{}

на

scores:=[]int32{0, 0}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы