C # 'Индекс был за пределами массива.'для одного массива, но не другого - PullRequest
1 голос
/ 03 ноября 2019

У меня есть 2 массива для хранения 2 серий входных данных от пользователя. Я установил границы для обоих массивов равными одной и той же переменной, но при вводе информации после окончательного ввода в первый массив я получаю исключение: «Индекс находился за пределами массива».

Когда я пытался изменить границы массивов на постоянные числа, они вели себя нормально.

            string[] names = new string[movies-1];
            double[] ratings = new double[movies-1];
            for(int i = 0; i < movies; i++)
            {
                names[i] = Console.ReadLine();
                ratings[i] = Convert.ToDouble(Console.ReadLine());
            }

System.IndexOutOfRangeException: 'Индекс находился за пределами массива.'

Ответы [ 2 ]

5 голосов
/ 03 ноября 2019

Вы только на одну (дважды) -

  1. Массивы должны быть созданы в длину movies, а не movies-1

  2. При итерации вы хотите, чтобы i был равен максимум movies-1, поскольку назначения массива начинаются с 0.

Подумайте об этом - еслиmovies равно 1 (один фильм), в настоящее время вы создаете экземпляр массива с 0 слотами - любой индекс, к которому вы пытаетесь получить доступ, выходит за пределы.

0 голосов
/ 03 ноября 2019

C # показывает индексирование на основе нуля . То есть, массив размером s будет иметь элементы, индексированные от 0 до s - 1.

Поскольку вы объявили массив names размером movies - 1, его элементы проиндексированыот 0 до movies - 2. Следовательно, цикл:

for(int i = 0; i < movies; i++)
{
    names[i] = Console.ReadLine();
    ratings[i] = ...
    ...

будет пытаться получить доступ к индексу out of bounds в массивах names и ratings, когда i = movies - 1.

Вы должны объявить свои массивы как:

string[] names = new string[movies];
double[] ratings = new double[movies];

, чтобы они соответствовали вашему определению цикла for.

...