Почему выводит ошибку: System.IndexOutOfRangeException: "Индекс находился вне границ массива."?
я решил изучить C# и столкнулся с проблемой решения которой нигде не смог найти. Изначально задача звучит так: Дан одномерный массив, сформировать новый массив из элементов кратных C первого массива. Я попутался решить этот массив и мне выдало ошибку
System.IndexOutOfRangeException: "Индекс находился вне границ массива."
Я прошу либо решить ошибку либо, полностью на ваше виденье переписать код и решить задачу.
int k=0, a=0,i=0,c,j=0;
string Omas = "", Tmas = "";
int[] ron = new int[20];
int[] bog = new int[k];
c = int.Parse(textBox1.Text);
Random rnd = new Random();
for (i = 0; i < ron.Length; i++)
{
ron[i] = rnd.Next(15);
if (ron[i] % c == 0)
{
k++;
}
Omas = Omas + " " + ron[i].ToString();
}
listBox1.Items.Add(Omas);
//Выводим изначальный массив
for (i = 0, j=0; i < 20; i++)
{
if (ron[i] %c==0)
{
bog[j] = ron[i];
Tmas = Tmas + " " + bog[j].ToString();
j++;
}
}
listBox2.Items.Add(Tmas);
//Выводим конечный массив
Ответы (1 шт):
Вам все правильно написал EvgeniyZ - вы сначала создаете массив (статический) нулевой длины, а потом пытаетесь присвоить значение его элементам, которых нет. Отсюда и ошибка. Необходимо, как Вам и рекомендовали, перенести создание массива bog на место после цикла вычисления k, либо в первом же цикле записывать подходящие кратные значения, скажем в List<int> bog.
Короткое решение задачи:
static int[] DivArray(int min, int max, int c)
{
// min - нижняя граница интервала генерации случайных чисел
// max - верхняя граница интервала генерации случайных чисел
// с - число, на которое будут делиться элементы полученной последовательности
// Формируем последовательность случайных чисел в диапазоне
// между [min и max], равную длине интервала min - max
var arrRnd = Enumerable.Range(0, max - min + 1)
.Select(x => new Random().Next(min, max + 1));
// Выбираем из последовательности arrRnd числа, делящиеся на c без остатка
var arrDiv = arrRnd.Where(x => x % c == 0);
// Возвращаем полученный массив
return arrDiv.ToArray();
}
