Удаление строчки с определённым элементом из рваного массива - C#
Формулировка задачи:
Полностью задание звучит так: Удалить первую строку, в которой встречается заданное число K.
Есть две функции: DeleteStrings — удаляет строчку, PrintArray3 — печатает массив.
Проблема в том, что функции работают не очень корректно. Строчка удаляется, но при печати массива программа аварийно показывает сообщение (на скриншоте). Не могу найти что у меня может иметь размер null
static void DeleteStrings (ref int[][] arr3, int[] lenRv1, int stringsRv) // удаление строчки рваного массива
{
int[][] temp3 = new int[stringsRv - 1][];
int[] lenTemp = new int[stringsRv - 1];
int K = ReadIntNumber("Введите элемент, строчку с которым надо удалить: ", MIN_VALUE, MAX_VALUE);
bool test = false;
for (int i = 0; i < stringsRv; i++) // есть ли введённый элемент К
{
for (int m = 0; m < lenRv1[i]; m++)
{
if ((arr3[i][m] == K) && (!test))
test = true;
}
}
if (test) // если есть
{
int i, j, t = -1;
bool check0 = false;
for (i = 0; i < stringsRv; i++ )
{
for (j = 0; j < lenRv1[i]; j++)
{
if(arr3[i][j] == K && !check0)
{
t = i; // номер строчки с элементом
lenRv1[i] = 0;
check0 = true; // чтобы не переприсваивать номер строчки
break;
}
}
}
i = 0;
while(i != t) // до удалённой строчки переприсваиваем
{
for (j = 0; j < lenRv1[i]; j++)
{
temp3[i] = new int[lenRv1[i]];
temp3[i][j] = arr3[i][j];
}
i++;
}
for (i = t+1; i < stringsRv; i++) // после удалённой строчки присваиваем значение следующей строчки
{
for (j = 0; j < lenRv1[i-1]; j++)
{
temp3[i] = new int[lenRv1[i+1]];
temp3[i][j] = arr3[i + 1][j];
}
}
arr3 = temp3;
Console.WriteLine("Строчка удалена");
}
else Console.WriteLine("Строчка с данным элементов не найдена\n");
}
static void PrintArray3(int[][] arr3, int stringsRv, int[] lenRv) // печать рваного массива
{
for (int i = 0; i < arr3.Length; i++)
{
for (int j = 0; j < arr3[i].Length; j++)
{
Console.Write("{0, 5}", arr3[i][j]);
}
Console.Write("\n");
}
}Решение задачи: «Удаление строчки с определённым элементом из рваного массива»
textual
Листинг программы
static int[][] arr = new int[2][];
static int[] lenR = new int[2];
static void Main(string[] args)
{
arr[0] = new int[5];
arr[1] = new int[5];
arr[0][0] = 5;
arr[0][1] = 5;
arr[0][2] = 5;
arr[0][3] = 5;
arr[0][4] = 5;
arr[1][0] = 5;
arr[1][1] = 5;
arr[1][2] = 5;
arr[1][3] = 5;
arr[1][4] = 5;
lenR[0] = 5;
lenR[1] = 5;
PrintArray3(arr, 5, lenR);
Console.ReadLine();
}
static void PrintArray3(int[][] arr3, int stringsRv, int[] lenRv) // печать рваного массива
{
for (int i = 0; i < arr3.Length; i++)
{
for (int j = 0; j < arr3[i].Length; j++)
{
Console.Write("{0, 5}", arr3[i][j]);
}
Console.Write("\n");
}
}