|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Добрый день Прошлой теме я написал программу для умножение 2-х матриц с количеством 2-х столбцов и 2-х строк. Решив ее изменить, где пользователь смог бы вести n количество строк и m количество столбцов. Но при вводе элемента массива сразу же выдается мне ошибка. Помогите пожалуйста начинающему. NullReferenceException Was Unhandled Object reference not set to an instance of an object. А вот и сама программа class Program { static void Main(string[] args) { Math mathe = new Math(); Matrix l1 = new Matrix(); int first, second, nn1, nn2, t,z; Console.Write("Pervoye cislo ravno: "); first = int.Parse(Console.ReadLine()); Console.Write("Vtoroye cislo ravno: "); second = int.Parse(Console.ReadLine()); Console.Write("Vvedute kolicestvo strok: "); nn1=int.Parse(Console.ReadLine()); Console.Write("Vvedute kolicestvo stolbcov: "); nn2 = int.Parse(Console.ReadLine()); l1.Get_nm(nn1,nn2); Matrix m1 = new Matrix(); Matrix m2 = new Matrix(); for (int i = 0; i < nn1; i++) for (int j = 0; j < nn2; j++) { Console.Write("m1.Mass[{0},{1}]=", i, j); m1.mas[i, j] = int.Parse(Console.ReadLine()); } for (int i = 0; i < nn1; i++) for (int j = 0; j < nn2; j++) { Console.Write("m2.Mass[{0},{1}]=", i, j); m2.mas[i, j] = int.Parse(Console.ReadLine()); } Console.ReadLine(); Console.WriteLine("Summa dvux cisel sostavlyayet {0} ", mathe.Sum(first,second)); Console.WriteLine("\n Proizvedeniye dvux matric sostavlyayet "); Matrix result_2 = mathe.Sum(m1, m2); for (int i=0; i<2; i++) for (int j = 0; j < 2; j++) { Console.WriteLine("result[{0}, {1}]={2}", i, j, result_2.mas[i, j]); } Console.ReadLine(); } } class Matrix { public int[,] mas; public void Get_nm(int n, int m) { mas = new int[n,m]; } } class Math { public int s; public int Sum(int first, int second) { return first + second; } public Matrix Sum(Matrix first, Matrix second) { Matrix resul_1 = new Matrix(); Matrix n = new Matrix(); for (int i = 0; i <n.mas.Length; i++) { for (int j = 0; j < n.mas.Length; j++) { s = 0; for (int l = 0; l < n.mas.Length; l++) { s = s + first.mas[i, l] * second.mas[l, j]; } resul_1.mas[i, j] = s; } } return resul_1; } } } Заранее спасибо за ваш ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 17:49 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Aleksandr1980, неужели так сложно научиться оформлять свой код подобающим образом? Я такой код даже читать не буду. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 17:55 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Ну вот отредактировал class Program { static void Main(string[] args) { Math mathe = new Math(); Matrix l1 = new Matrix(); int first, second, nn1, nn2, t,z; Console.Write("Pervoye cislo ravno: "); first = int.Parse(Console.ReadLine()); Console.Write("Vtoroye cislo ravno: "); second = int.Parse(Console.ReadLine()); Console.Write("Vvedute kolicestvo strok: "); nn1=int.Parse(Console.ReadLine()); Console.Write("Vvedute kolicestvo stolbcov: "); nn2 = int.Parse(Console.ReadLine()); l1.Get_nm(nn1,nn2); Matrix m1 = new Matrix(); Matrix m2 = new Matrix(); for (int i = 0; i < nn1; i++) for (int j = 0; j < nn2; j++) { Console.Write("m1.Mass[{0},{1}]=", i, j); m1.mas[i, j] = int.Parse(Console.ReadLine()); } for (int i = 0; i < nn1; i++) for (int j = 0; j < nn2; j++) { Console.Write("m2.Mass[{0},{1}]=", i, j); m2.mas[i, j] = int.Parse(Console.ReadLine()); } Console.ReadLine(); Console.WriteLine("Summa dvux cisel sostavlyayet {0} ", mathe.Sum(first,second)); Console.WriteLine("\n Proizvedeniye dvux matric sostavlyayet "); Matrix result_2 = mathe.Sum(m1, m2); for (int i=0; i<2; i++) for (int j = 0; j < 2; j++) { Console.WriteLine("result[{0}, {1}]={2}", i, j, result_2.mas[i, j]); } Console.ReadLine(); } } class Matrix { public int[,] mas; public void Get_nm(int n, int m) { mas = new int[n,m]; } } class Math { public int s; public int Sum(int first, int second) { return first + second; } public Matrix Sum(Matrix first, Matrix second) { Matrix resul_1 = new Matrix(); Matrix n = new Matrix(); for (int i = 0; i <n.mas.Length; i++) { for (int j = 0; j < n.mas.Length; j++) { s = 0; for (int l = 0; l < n.mas.Length; l++) { s = s + first.mas[i, l] * second.mas[l, j]; } resul_1.mas[i, j] = s; } } return resul_1; } } } ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 17:59 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Странно я отредактировал опять так стало. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 18:00 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Aleksandr1980, Используй теги из SRC для C# ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 18:01 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
этот тег надо писать в начале и в конце кода ? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 18:05 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Aleksandr1980, ты не иниициализируешь массив внутри класса Matrix перед записью. У тебя есть код вида: Код: c# 1. 2. 3. 4. 5. 6.
Нужно сделать так: Код: c# 1. 2. 3. 4.
Aleksandr1980Ну вот отредактировал Надо использовать теги оформления кода. Читай правила и советы по оформлению кода . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 18:05 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Теперь проблема возникла вот в этом мместе Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
} Выходит та же самая ошибка. Там я хочу Matrix.mas.Length но увы у меня цикл mas не видет ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 18:20 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Aleksandr1980, это аналогичная ошибка. Подумай сам как её исправить. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 23:26 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
bazile объесните пожалуйста почему я должен писать m1.Get_nm(nn1,nn2); m2.Get_nm(nn1,nn2); ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2015, 10:02 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Aleksandr1980, без этих строк поле mas остается неинициализированным. Так mas это массив, то есть ссылочный тип, то она будет иметь значение null. Поэтому обращения к нему и приводят к NullReferenceException. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2015, 13:02 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Aleksandr1980, Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.11.2015, 14:04 |
|
Умножение 2-х матриц (Возникновение ошибки)
|
|||
---|---|---|---|
#18+
Aleksandr1980bazile объесните пожалуйста почему я должен писать m1.Get_nm(nn1,nn2); m2.Get_nm(nn1,nn2); Кстати, вы свободный человек, никому ничего не должны, ни четать, ни песать, ни объеснять. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2015, 11:47 |
|
|
start [/forum/topic.php?fid=20&fpage=73&tid=1401051]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 317ms |
total: | 445ms |
0 / 0 |