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