Одномерный динамический массив C#
Имеется вот такая задача:
Случайные числа в диапазоне от -5 до 5 разложить по двум массивам: в одни помещать только положительные, во второй - только отрицательные. Числа, равные нулю, игнорировать. Вывести на экран все сгенерированные случайные числа и элементы обоих массивов.
Не могу разобраться в чем ошибка и правильно ли я вообще делаю
int p = 1;
int n = 1;
for(int i = 0; i < 20; i++)
{
int[] poloz = new int[p];
int[] otric = new int[n];
int ch = Random();
if (ch > 0)
{
poloz[p - 1] = ch;
p++;
}
else if (ch < 0)
{
otric[n - 1] = ch;
n++;
}
}
Ответы (2 шт):
Думаю, стоит поместить массивы вне тела цикла и задать им размер. Если нужен именно массив, то вариант только изменять ему размер на каждое добавление. Внутри Array.Resize выделение массива нового размера и копирование:
int p = 1;
int n = 1;
int[] poloz = new int[0];
int[] otric = new int[0];
for (int i = 0; i < 20; i++)
{
int ch = Random();
if (ch > 0)
{
Array.Resize(ref poloz, p);
poloz[p - 1] = ch;
p++;
}
else if (ch < 0)
{
Array.Resize(ref otric, n);
otric[n - 1] = ch;
n++;
}
}
ты хочешь использовать динамический массив, но в C# на самом деле такого нет.
есть только структуры данных которые похожи на динамический массив
var poloz = new List<int>(15);
var otric = new List<int>(15);
for(int i = 0; i < 20; i++)
{
int ch = Random();
if (ch > 0)
{
poloz.Add(ch);
}
else if (ch < 0)
{
otric.Add(ch);
}
}
у класса List есть метод Count - он и есть твой "динамический" размер массива