Удаление строчки с определённым элементом из рваного массива - 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"); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д