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