Вопрос C# программирование. выдаёт ошибку: "индекс находился вне границ массива"

Регистрация
15 Июл 2013
Сообщения
96
Репутация
-3
Спасибо
1
Монет
0
Выдаёт ошибку: "Индекс находился вне границ массива"



static void Main(string[] args)

{

int kolvo = 0;

Console.WriteLine("Введите длину массива: ");

int a = Convert.ToInt32(Console.ReadLine());

int[] mass = new int [a];



Console.WriteLine("Введите элементы массива: ");

for (int i = 0; i < mass.Length; ++i)

{

mass = Convert.ToInt32(Console.ReadLine());

}



Console.WriteLine("Ваш массив:");

for (int i = 0; i < mass.Length; ++i)

{

Console.WriteLine(mass);

}



for (int i = 0; i < mass.Length; ++i)

{

if (mass[i + 1] < mass) kolvo++;

}



Console.WriteLine("Количество чисел которые меньше прошлого числа: ");

Console.WriteLine(kolvo);

}
 
Проблема заключается в следующей строке кода:

if (mass[i + 1] < mass) kolvo++;

В последней итерации цикла for переменная i равна mass.Length - 1, таким образом, когда вы пытаетесь получить доступ к элементу mass[i + 1], вы выходите за пределы массива. Чтобы исправить эту ошибку, вам нужно ограничить количество итераций цикла for на единицу меньше, чтобы последний элемент не сравнивался с несуществующим элементом после него:

for (int i = 0; i < mass.Length - 1; ++i)
{
if (mass[i + 1] < mass) kolvo++;
}

Это исправит ошибку "Индекс находился вне границ массива".
 
static void Main(string[] args)
{
int kolvo = 0;
Console.WriteLine("Введите длину массива: ");
int a = Convert.ToInt32(Console.ReadLine());
int[] mass = new int[a];

Console.WriteLine("Введите элементы массива: ");
for (int i = 0; i < mass.Length; ++i)
{
mass = Convert.ToInt32(Console.ReadLine());
}

Console.WriteLine("Ваш массив:");
for (int i = 0; i < mass.Length; ++i)
{
Console.WriteLine(mass);
}

for (int i = 0; i < mass.Length - 1; ++i)
{
if (i == mass.Length - 2 && mass[i + 1] < mass)
{
kolvo++;
}
else if (mass[i + 1] < mass)
{
kolvo++;
}
}

Console.WriteLine("Количество чисел которые меньше прошлого числа: ");
Console.WriteLine(kolvo);
}
 
for (int i = 0; i < mass.Length; ++i)
{
if (mass[i + 1] < mass) kolvo++;
}
когда i будет принимать индекс последнего элемента то обращением mass[i + 1] ты вылезешь за границу

исправь на:
for (int i = 0; i < mass.Length - 1; ++i)

{
if (mass[i + 1] < mass) kolvo++;
}
 
Проблема возникает при проходе последнего элемента массива в цикле for: когда мы проверяем mass[i + 1] < mass, то в последней итерации i равно mass.Length - 1, и при попытке обратиться к i + 1 элементу мы выходим за границы массива.

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

for (int i = 0; i < mass.Length - 1; ++i)
{
if (mass[i + 1] < mass) kolvo++;
}

Также стоит учесть случай, когда в массиве всего один элемент - в этом случае цикл не будет выполнен ни разу, и результат будет некорректен. Можно добавить проверку длины массива перед циклом:

if (mass.Length > 1)
{
for (int i = 0; i < mass.Length - 1; ++i)
{
if (mass[i + 1] < mass) kolvo++;
}
}
else
{
Console.WriteLine("Массив слишком короткий");
}
 
Назад
Сверху