Удаление строчки с определённым элементом из рваного массива - C#

Узнай цену своей работы

Формулировка задачи:

Полностью задание звучит так: Удалить первую строку, в которой встречается заданное число K. Есть две функции: DeleteStrings — удаляет строчку, PrintArray3 — печатает массив.
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");
                }            
        }
Проблема в том, что функции работают не очень корректно. Строчка удаляется, но при печати массива программа аварийно показывает сообщение (на скриншоте). Не могу найти что у меня может иметь размер null

Решение задачи: «Удаление строчки с определённым элементом из рваного массива»

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");
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5
Похожие ответы