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

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

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

Задача: разработать калькулятор для логических множеств ( для операций пересечение, объединение, разность и симметричная разность). Сделано с использованием коллекции ArrayList, элементами множества являются объекты. Программа выводит ошибку на некоторых проверках(систематики ошибки не найдено): " Необработанное исключение типа "System.ArgumentOutOfRangeException" в mscorlib.dll Дополнительные сведения: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции." Выделяет строку if (arrCopyA[i].Equals(arrCopyB[j])==true) желтым и работа программы прерывается.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Collections;
  7. namespace KAJlbKYJl9lTOP
  8. {
  9. class Mnogg
  10. {
  11. public static ArrayList arrCopyA= new ArrayList();
  12. public static ArrayList arrCopyB = new ArrayList();
  13. public static int k = 0;
  14. public static string peresech = "";
  15. public static string ostatA = "", ostatB = "";
  16. public static string objedin = "";
  17.  
  18. //Ввод множеств в консоль
  19. public static void inputEl()
  20. {
  21.  
  22. string A = "";
  23. string B = "";
  24. Console.WriteLine("Введите элементы множества A через пробел: ");
  25. A = Console.ReadLine();
  26.  
  27. Console.WriteLine("Введите элементы множества B через пробел: ");
  28. B = Console.ReadLine();
  29. //проверка на пустые строки
  30. if ((A == "")||(B == ""))
  31. {
  32. Console.WriteLine("WARNING! Введено пустое множество. Повторите ввод");
  33. Console.ReadLine();
  34. Mnogg.inputEl();
  35. }
  36. Mnogg.Konvert(A, B);
  37. }
  38. //Перевод строк в массивы
  39. public static void Konvert(string A, string B)
  40. { ArrayList arrA = new ArrayList();
  41. ArrayList arrB = new ArrayList();
  42. //обработка строки А, занесение элементов в массив
  43. int position = 0;
  44. int start = 0;
  45. do
  46. {
  47. position = A.IndexOf(" ", start);
  48. if (position >= 0)
  49. {
  50. arrA.Add(A.Substring(start, position - start + 1).Trim());
  51. start = position + 1;
  52. }
  53. else
  54. if ((start != 0) && (start < A.Length))
  55. {
  56. arrA.Add(A.Substring(start, A.Length - start).Trim());
  57. position = position - 1;
  58. }
  59. } while (position > -1);
  60. //обработка строки B, занесение элементов в массив
  61. position = 0;
  62. start = 0;
  63. do
  64. {
  65. position = B.IndexOf(" ", start);
  66. if (position >= 0)
  67. {
  68. arrB.Add(B.Substring(start, position - start + 1).Trim());
  69. start = position + 1;
  70. }
  71. else
  72. if ((start != 0) && (start < B.Length))
  73. {
  74. arrB.Add(B.Substring(start, B.Length - start).Trim());
  75. position = position - 1;
  76. }
  77. } while (position > -1);
  78. arrCopyA = arrA;
  79. arrCopyB = arrB;
  80. /* foreach (Object obj in arrA)
  81. Console.Write(" {0}", obj);
  82. Console.WriteLine();
  83. Console.WriteLine();
  84. foreach (Object obj in arrB)
  85. Console.Write(" {0}", obj);
  86. Console.WriteLine(); */
  87. }
  88. //Метод определения пересечения множеств
  89. public static void Peresech()
  90. {
  91. k = 0;
  92. peresech = "";
  93. int na = arrCopyA.Count ;
  94. int nb = arrCopyB.Count;
  95. int i = 0;
  96. int j = 0;
  97. object a = arrCopyA[i];
  98. object b = arrCopyB[j];
  99. do
  100. {
  101. do {
  102. if (arrCopyA[i].Equals(arrCopyB[j])==true)
  103. {
  104. peresech = peresech + arrCopyA[i] + " ";
  105. k = k + 1;
  106. arrCopyA.RemoveAt(i);
  107. arrCopyB.RemoveAt(j);
  108. j = 0;
  109. }
  110. else
  111. {
  112. j = j + 1;
  113. }
  114. } while (j<=4);
  115. i = i + 1;
  116. j = 0;
  117. } while (i<=4);
  118. }
  119. //метод определения объединения множеств
  120. public static void Objedinen()
  121. {
  122. objedin = null;
  123. int nA = arrCopyA.Count;
  124. int nB = arrCopyB.Count;
  125. for (int i=0; i< nA; i++)
  126. {
  127. objedin = objedin + arrCopyA[i] + " ";
  128. }
  129. objedin = objedin + peresech;
  130. for(int i=0; i< nB; i++)
  131. {
  132. objedin = objedin + arrCopyB[i] + " ";
  133. }
  134. }
  135. public static void Raznost()
  136. {
  137. Console.WriteLine("Выберете разность множеств: a)А-B; b)B-A.");
  138. Console.WriteLine("Введите нужный номер и нажмите Enter: ");
  139. int w = Console.Read();
  140. if (w == 1)
  141. {
  142. Console.WriteLine();
  143. Console.Write("Разность множеств А - B : ");
  144. foreach (Object obj in arrCopyA)
  145. Console.Write(" {0}", obj);
  146. Console.WriteLine();
  147. }
  148. if (w == 2)
  149. {
  150. Console.WriteLine();
  151. Console.Write("Разность множеств B - A : ");
  152. foreach (Object obj in arrCopyB)
  153. Console.Write(" {0}", obj);
  154. Console.WriteLine();
  155. }
  156. Console.Read();
  157. }
  158. public static void SimmRazn()
  159. {
  160. objedin = null;
  161. int nA = arrCopyA.Count;
  162. int nB = arrCopyB.Count;
  163. for (int i = 0; i < nA; i++)
  164. {
  165. objedin = objedin + arrCopyA[i] + " ";
  166. }
  167. for (int i = 0; i < nB; i++)
  168. {
  169. objedin = objedin + arrCopyB[i] + " ";
  170. }
  171. }
  172. //метод выбора нужной функции
  173. public static void Chose()
  174. {
  175. Console.WriteLine("Выберете нужную функцию:");
  176. Console.WriteLine("1.Пересечение ");
  177. Console.WriteLine("2.Объединение ");
  178. Console.WriteLine("3.Разность ");
  179. Console.WriteLine("4.Симметрическая разность ");
  180. Console.WriteLine("Введите нужный номер и нажмите Enter:");
  181. int c;
  182. c = Console.Read();
  183. switch (c)
  184. {
  185. case '1':
  186. Console.WriteLine();
  187. Mnogg.Peresech();
  188. if (k == 0)
  189. {
  190. Console.WriteLine("Пересечения нет");
  191. }
  192. else {
  193. Console.Write("Пересечение множеств А и B : ");
  194. Console.WriteLine(peresech);
  195. }
  196. break;
  197. case '2':
  198. Console.WriteLine();
  199. if (k == 0)
  200. {
  201. Mnogg.Peresech();
  202. }
  203. Mnogg.Objedinen();
  204. Console.Write("Объединение множеств А и B : ");
  205. Console.WriteLine(objedin);
  206. break;
  207. case '3':
  208. Console.WriteLine();
  209. if (k == 0)
  210. {
  211. Mnogg.Peresech();
  212. }
  213. Mnogg.Raznost();
  214. break;
  215. case '4':
  216. Console.WriteLine();
  217. if (k == 0)
  218. {
  219. Mnogg.Peresech();
  220. }
  221. Mnogg.SimmRazn();
  222. break;
  223. }
  224. Console.ReadLine();
  225. Mnogg.Chose();
  226. }
  227. }
  228. class Program
  229. {
  230. static void Main(string[] args)
  231. {
  232. Console.WriteLine("Операции над множествами с элементами в виде объектов");
  233. Mnogg.inputEl();
  234. Mnogg.Chose();
  235. // Ожидание нажатия клавиши Enter перед завершением работы
  236. Console.ReadLine();
  237. }
  238. }
  239. }
Помогите найти и исправить ошибку

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

textual
Листинг программы
  1.  public static void Peresech()
  2.         {
  3.            
  4.             k = 0;
  5.             peresech = "";
  6.            
  7.             int na = arrCopyA.Count ;
  8.             int nb = arrCopyB.Count;
  9.            
  10.             int i = 0;
  11.             int j = 0;
  12.             object a = arrCopyA[i];
  13.             object b = arrCopyB[j];
  14.  
  15.             do
  16.             {
  17.                 do {
  18.                    
  19.                   if (arrCopyA[i].Equals(arrCopyB[j])==true)
  20.                     {
  21.                         peresech = peresech + arrCopyA[i] + " ";
  22.                         k = k + 1;
  23.                         arrCopyA.RemoveAt(i);
  24.                         arrCopyB.RemoveAt(j);
  25.                         j = 0;
  26.                     }
  27.                     else
  28.                     {
  29.                         j = j + 1;
  30.                     }                                      
  31.                 } while (j<=4);
  32.                 i = i + 1;
  33.                 j = 0;
  34.             } while (i<=4);
  35.            
  36.         }

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


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

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

10   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы