ArrayList: необработанное исключение. Операции над множествами с использованием ArrayList - C#

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

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

Задача: разработать калькулятор для логических множеств ( для операций пересечение, объединение, разность и симметричная разность). Сделано с использованием коллекции ArrayList, элементами множества являются объекты. Программа выводит ошибку на некоторых проверках(систематики ошибки не найдено): " Необработанное исключение типа "System.ArgumentOutOfRangeException" в mscorlib.dll Дополнительные сведения: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции." Выделяет строку if (arrCopyA[i].Equals(arrCopyB[j])==true) желтым и работа программы прерывается.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
 
namespace KAJlbKYJl9lTOP
{
    class Mnogg
    {
        public static ArrayList arrCopyA= new ArrayList();
        public static ArrayList arrCopyB = new ArrayList();
        public static int k = 0;
        public static string peresech = "";
        public static string ostatA = "", ostatB = "";
        public static string objedin = "";

        //Ввод множеств в консоль
        public static void inputEl()
        {

            string A = "";
            string B = "";
 
            Console.WriteLine("Введите элементы множества A через пробел: ");
            A = Console.ReadLine();

            Console.WriteLine("Введите элементы множества B через пробел: ");
            B = Console.ReadLine();
 
            //проверка на пустые строки
            if ((A == "")||(B == ""))
            {
                Console.WriteLine("WARNING! Введено пустое множество. Повторите ввод");
                Console.ReadLine();
                Mnogg.inputEl();
            }
 
            Mnogg.Konvert(A, B);
 
        }
 
        //Перевод строк в массивы
        public static void Konvert(string A, string B)
        {      ArrayList arrA = new ArrayList();
               ArrayList arrB = new ArrayList();
 
        //обработка строки А, занесение элементов в массив
        int position = 0;
            int start = 0;
            do
            {
                position = A.IndexOf(" ", start);
                if (position >= 0)
                {
                    arrA.Add(A.Substring(start, position - start + 1).Trim());
                    start = position + 1;
                }
                else
                    if ((start != 0) && (start < A.Length))
                {
                    arrA.Add(A.Substring(start, A.Length - start).Trim());
                    position = position - 1;
                }
 
            } while (position > -1);
 
            //обработка строки B, занесение элементов в массив
            position = 0;
            start = 0;
            do
            {
                position = B.IndexOf(" ", start);
                if (position >= 0)
                {
                    arrB.Add(B.Substring(start, position - start + 1).Trim());
                    start = position + 1;
                }
                else
                    if ((start != 0) && (start < B.Length))
                {
                    arrB.Add(B.Substring(start, B.Length - start).Trim());
                    position = position - 1;
                }
 
            } while (position > -1);
 
            arrCopyA = arrA;
            arrCopyB = arrB;
 
            /* foreach (Object obj in arrA)
                  Console.Write("   {0}", obj);
              Console.WriteLine();
              Console.WriteLine();
              foreach (Object obj in arrB)
                  Console.Write("   {0}", obj);
              Console.WriteLine(); */
        }
 
        //Метод определения пересечения множеств
        
        public static void Peresech()
        {
            
            k = 0;
            peresech = "";
            
            int na = arrCopyA.Count ;
            int nb = arrCopyB.Count;
           
            int i = 0;
            int j = 0;
            object a = arrCopyA[i];
            object b = arrCopyB[j];
 
            do
            {
                do {
                    
                  if (arrCopyA[i].Equals(arrCopyB[j])==true)
                    {
                        peresech = peresech + arrCopyA[i] + " ";
                        k = k + 1;
                        arrCopyA.RemoveAt(i);
                        arrCopyB.RemoveAt(j);
                        j = 0;
                    }
                    else
                    {
                        j = j + 1;
                    }                                       
                } while (j<=4);
                i = i + 1;
                j = 0;
            } while (i<=4);
           
        }
 
        //метод определения объединения множеств
        public static void Objedinen()
        {
            objedin = null;
            int nA = arrCopyA.Count;
            int nB = arrCopyB.Count;
            for (int i=0; i< nA; i++)
            {
                objedin = objedin + arrCopyA[i] + " ";
            }
            objedin = objedin + peresech;
            for(int i=0; i< nB; i++)
            {
                objedin = objedin + arrCopyB[i] + " ";
            }
        }
        public static void Raznost()
        {
            
            Console.WriteLine("Выберете разность множеств: a)А-B; b)B-A.");
            Console.WriteLine("Введите нужный номер и нажмите Enter: ");
            int w = Console.Read();
            if (w == 1)
            {
                Console.WriteLine();
                Console.Write("Разность множеств А - B : ");
                foreach (Object obj in arrCopyA)
                    Console.Write(" {0}", obj);
                Console.WriteLine();
            }
            if (w == 2)
            {
                Console.WriteLine();
                Console.Write("Разность множеств B - A : ");
                foreach (Object obj in arrCopyB)
                    Console.Write(" {0}", obj);
                Console.WriteLine();
            }
            Console.Read();
 
        }
 
        public static void SimmRazn()
        {
            objedin = null;
            int nA = arrCopyA.Count;
            int nB = arrCopyB.Count;
            for (int i = 0; i < nA; i++)
            {
                objedin = objedin + arrCopyA[i] + " ";
            }
 
            for (int i = 0; i < nB; i++)
            {
                objedin = objedin + arrCopyB[i] + " ";
            }
        }
 
        //метод выбора нужной функции
        public static void Chose()
        {
            Console.WriteLine("Выберете нужную функцию:");
            Console.WriteLine("1.Пересечение ");
            Console.WriteLine("2.Объединение ");
            Console.WriteLine("3.Разность ");
            Console.WriteLine("4.Симметрическая разность ");
            Console.WriteLine("Введите нужный номер и нажмите Enter:");
 
            int c;
            c = Console.Read();
            switch (c)
            {
                case '1':
                    Console.WriteLine();
                    Mnogg.Peresech();
 
                    if (k == 0)
                    {
                        Console.WriteLine("Пересечения нет");
                    }
                    else {
                        Console.Write("Пересечение множеств А и B : ");
                        Console.WriteLine(peresech);
                    }
                    
                    break;
                case '2':
                    Console.WriteLine();
                    if (k == 0)
                    {
                        Mnogg.Peresech();
                    }
                    Mnogg.Objedinen();
                    Console.Write("Объединение множеств А и B : ");
                    Console.WriteLine(objedin);
                    break;
                case '3':
                    Console.WriteLine();
                    if (k == 0)
                    {
                        Mnogg.Peresech();
                    }
                    
                    Mnogg.Raznost();
 
                    break;
                case '4':
                    Console.WriteLine();
                    if (k == 0)
                    {
                        Mnogg.Peresech();
                    }
                    Mnogg.SimmRazn();
                   
                    break;
            }
 
            Console.ReadLine();
            Mnogg.Chose();
 
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Операции над множествами с элементами в виде объектов");
            Mnogg.inputEl();
            Mnogg.Chose();
            // Ожидание нажатия клавиши Enter перед завершением работы
            Console.ReadLine();
        }
    }
}
Помогите найти и исправить ошибку

Решение задачи: «ArrayList: необработанное исключение. Операции над множествами с использованием ArrayList»

textual
Листинг программы
 public static void Peresech()
        {
            
            k = 0;
            peresech = "";
            
            int na = arrCopyA.Count ;
            int nb = arrCopyB.Count;
           
            int i = 0;
            int j = 0;
            object a = arrCopyA[i];
            object b = arrCopyB[j];
 
            do
            {
                do {
                    
                  if (arrCopyA[i].Equals(arrCopyB[j])==true)
                    {
                        peresech = peresech + arrCopyA[i] + " ";
                        k = k + 1;
                        arrCopyA.RemoveAt(i);
                        arrCopyB.RemoveAt(j);
                        j = 0;
                    }
                    else
                    {
                        j = j + 1;
                    }                                       
                } while (j<=4);
                i = i + 1;
                j = 0;
            } while (i<=4);
           
        }

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


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

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

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