Вываливается EXEPTION при перегрузке оператора. Порядок действий внизу - C#

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

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

Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication_Si_Shar_lb_2__part_2_
  6. {
  7. class StDemoArray
  8. {
  9. int[,] MyArray;
  10. int n, m;//закрытые поля: размерность массива
  11. public StDemoArray(int sizeN, int sizeM)//konstructor
  12. {
  13. MyArray = new int[sizeN, sizeM];
  14. this.n = sizeN;
  15. this.m = sizeM;
  16.  
  17. }
  18. //======================= конструктор для перегрузки метода для умножения массива на массив
  19. public StDemoArray()//konstructor
  20. {
  21. MyArray = new int[this.n, this.m];
  22. }
  23. //public StDemoArray()//konstructor
  24. //{
  25. // this.n = n;
  26. // this.m = m;
  27. // MyArray = new int[n, m];
  28. //}
  29. public int LengthN //свойство, возвращающее количество строк
  30. {
  31. get { return n; }
  32. }
  33. public int LengthM //свойство, возвращающее количество столбцов
  34. {
  35. get { return m; }
  36. }
  37. //============================================================= //индексатор
  38. public int this[int i, int j] //индексатор
  39. {
  40. get
  41. {
  42. if (i < 0 || i >= n || j < 0 || j >= m) throw new Exception("выход за границы массива");//---------ОШИБКА ЗДЕСЬ !!!!!!!!
  43. else return MyArray[i, j];
  44. }
  45. set
  46. {
  47. if (i < 0 || i >= n || j < 0 || j >= m) throw new Exception("выход за границы массива");
  48. else if (value >= 0 && value <= 100) MyArray[i, j] = value;
  49. else throw new Exception("присваивается недопустимое значение");
  50. }
  51. }
  52. public static StDemoArray operator ++(StDemoArray x)//заголовков унарных операций
  53. {
  54. for (int j = 0; j < x.m; j++)
  55. {
  56. for (int i = 0; i < x.n; i++)
  57. {
  58. x[i, j] = x[i, j] + 1;
  59. }
  60. }
  61. return x;
  62. }
  63. public static StDemoArray operator --(StDemoArray x)//заголовок унарных операций
  64. {
  65. for (int j = 0; j < x.m; j++)
  66. {
  67. for (int i = 0; i < x.n; i++)
  68. {
  69. x[i, j] = x[i, j] - 1;
  70. }
  71. }
  72. return x;
  73. }
  74.  
  75. public int LengthArray //свойство, возвращающее размерность
  76. {
  77. get { return MyArray.Length; }
  78. }
  79. public void Print(string name) //метод - выводит поле-массив на экран
  80. {
  81. Console.WriteLine(name + ": ");
  82. for (int i = 0; i < MyArray.Length; i++)
  83. for (int j = 0; i < MyArray.Length; j++)
  84. Console.Write(MyArray[i,j] + " ");
  85. Console.WriteLine();
  86. }
  87.  
  88. public void Print2()
  89. {
  90. for (int i = 0; i < this.n; i++, Console.WriteLine())
  91. for (int j = 0; j < this.m; j++)
  92. Console.Write("{0,1} ", this.MyArray[i, j]);
  93. }
  94. public static bool operator true(StDemoArray a) //перегрузка константы true
  95. {
  96. foreach (int i in a.MyArray)
  97. {
  98. if (i < 0)
  99. {
  100. return false;
  101. }
  102. }
  103. return true;
  104. }
  105. public static bool operator false(StDemoArray a)//перегрузка константы false
  106. {
  107. foreach (int i in a.MyArray)
  108. {
  109. if (i > 0)
  110. {
  111. return true;
  112. }
  113. }
  114. return false;
  115. }
  116. //==============================================>>> перемножить два массива <<< ======================
  117. public static StDemoArray operator * (StDemoArray x, StDemoArray y)//заголовков унарных операций
  118. {
  119. //StDemoArray temp = new StDemoArray();
  120. //if (x.LengthArray == y.LengthArray)
  121. //{
  122. for (int i = 0; i < x.LengthArray; ++i)
  123. {
  124. for (int j = 0; j < x.LengthArray; ++j)
  125. {
  126. x[i, j] = x[i, j] * y[i, j];
  127. //return x;
  128. }
  129. }
  130. //}
  131. //else
  132. //{
  133. // throw new Exception("несоответствие размерностей");
  134. //}
  135. return x;
  136. }
  137. }
  138.  
  139. //============================================================= //переопределение
  140.  
  141. class Program
  142. {
  143. static void Main()
  144. {
  145. Console.WriteLine("Введите размерность массива");
  146. Console.Write(" Массив размерностью n * m :");
  147. Console.Write("\n n=");
  148. int x = int.Parse(Console.ReadLine());
  149. Console.Write(" m=");
  150. int y = int.Parse(Console.ReadLine());
  151. StDemoArray a = new StDemoArray(x,y);
  152. for (int i = 0; i < a.LengthN; i++, Console.WriteLine())
  153. {
  154. for (int j = 0; j < a.LengthM; j++)
  155. {
  156. a[i, j] = i * j; // использование индексатора в режиме записи
  157. Console.Write("{0,5}", a[i, j]);// использование индексатора в режиме чтения
  158. }
  159. }
  160. Console.WriteLine();
  161. try
  162. {
  163. //Console.WriteLine(a[3, 3]);
  164. //a[0, 0] = 200;
  165. }
  166. catch (Exception e)
  167. {
  168. Console.WriteLine(e.Message);
  169. }
  170. Console.WriteLine("применим перегрузку оператора ++");
  171. ++a;
  172. a.Print2();
  173. Console.WriteLine();
  174. Console.WriteLine("применим перегрузку оператора --");
  175. Console.ReadLine();
  176. --a;
  177. a.Print2();
  178. Console.ReadLine();
  179. if (a)
  180. {
  181. Console.WriteLine("\nВ массиве все элементы положительные\n");
  182. }
  183. else Console.WriteLine("\nВ массиве есть не положительные элементы\n");
  184. Console.ReadLine();
  185. Console.WriteLine("создадим второй массив, такой же размерности");
  186. StDemoArray b = new StDemoArray(x, y);
  187. for (int i = 0; i < b.LengthN; i++, Console.WriteLine())
  188. {
  189. for (int j = 0; j < b.LengthM; j++)
  190. {
  191. b[i, j] = i * j; // использование индексатора в режиме записи
  192. Console.Write("{0,5}", b[i, j]);// использование индексатора в режиме чтения
  193. }
  194. }
  195. Console.WriteLine();
  196. try
  197. {
  198. //Console.WriteLine(a[3, 3]);
  199. //a[0, 0] = 200;
  200. }
  201. catch (Exception e)
  202. {
  203. Console.WriteLine(e.Message);
  204. }
  205. Console.WriteLine("перемножим 2 массива соответствующих размерностей");
  206. StDemoArray c = new StDemoArray(x,y);
  207. c = a*b;
  208. c.Print2();
  209. Console.ReadLine();
  210. }
  211. }
  212. }
// сделали первый массив, сделали второй массив. Перегрузили оператор * чтобы перемножить два массива. // каждый элемент перемноженного массива(это первый, поверх которого записывается произведению первого и второго элементов каждого массива соответственно

Решение задачи: «Вываливается EXEPTION при перегрузке оператора. Порядок действий внизу»

textual
Листинг программы
  1. /// <summary>Свойство, возвращающее количество строк</summary>
  2. public int LengthN //
  3. {
  4.     get { return MyArray.GetLength(0); }
  5. }
  6.  
  7. /// <summary>Свойство, возвращающее количество столбцов</summary>
  8. public int LengthM
  9. {
  10.     get { return MyArray.GetLength(1); }
  11. }

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


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

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

8   голосов , оценка 4.25 из 5

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

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

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