Member 12743232 Ответов: 3

Я получаю ошибку index was outside the bounds of the array in C#


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

Что я уже пробовал:

общественные двойной оценке(отдельные личности, IRandom случайных) {
// Используйте vars. yourVariable для доступа к переменным в хранилище переменных, т. е. yourVariable
ВАР х = (DoubleMatrix)ВАР.х;
ВАР з = (DoubleArray)ВАР.ж;
var obj = (DoubleArray)vars. obj;
var качество = 0.0;
двойная сумма = 0.0;
// качество = индивидуальное.RealVector("r"). Sum (x => x * x);
var решение = индивидуальное.BinaryVector ("КП");

//Random random = новый случайный();

for (int i=0; i< 10; i++)
{
ш[я] = 0.0;
}
for (int j=0; j< 39; j++)
{
for (int i=0; i< 10; i++)
{sum = sum + (w[i]* x[j, i]);
}
obj[j] = sum-x[j, 10];
качество = качество + obj[j];
}



качество;
}

3 Ответов

Рейтинг:
2

Patrice T

Вы должны научиться использовать отладчик как можно скорее. Вместо того чтобы гадать, что делает ваш код, пришло время увидеть, как он выполняется, и убедиться, что он делает то, что вы ожидаете.

Отладчик позволяет вам следить за выполнением строка за строкой, проверять переменные, и вы увидите, что есть точка, в которой он перестает делать то, что вы ожидаете.
Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
Когда код не делает того, что ожидается, вы близки к ошибке.

Используйте отладчик, чтобы проверить, имеют ли массивы ожидаемый размер.


Рейтинг:
1

OriginalGriff

Используйте отладчик: установите точку останова на линии

for (int i=0; i<10;i++)

и запустите свое приложение. Когда он достигнет линии, он остановится и позволит вам взять управление на себя.
Вы можете посмотреть на переменные, наведя курсор мыши на их имя, и выполнить один шаг выполнения с помощью панели инструментов так, чтобы он выполнял одну команду за раз.
Внимательно посмотрите на свои переменные и посмотрите, сможете ли вы определить, где возникает проблема: где-то вы используете значение i или j, которое слишком велико для массива, который вы пытаетесь индексировать.

Мы не можем сделать это за вас - у нас нет доступа к вашему" хранилищу переменных", поэтому мы не можем запустить ваш код.

(И "хранилище переменных" подразумевает "глобальную переменную" - что очень, очень плохая идея. Особенно когда вы начинаете изучать язык, основанный на OOPs, который по уважительным причинам не имеет действительно глобальных переменных.)


Рейтинг:
1

Karthik_Mahalingam

Вы получаете эту ошибку, потому что при попытке получить доступ к индексу массива/списка, который недоступен, будет выдана ошибка.
Вы должны проверить длину элементов перед доступом к индексу массива..
пример:

for (int i = 0; i < 10; i++)
        {
            if (w.Length >= 10) // Validate the Length of the items in collectoin before accessing the index 
                w[i] = 0.0;
        }


Проверка во всех местах доступа к индексу из массива