2016-11-23 71 views
-2

我想知道如何乘以二維數組(矩陣)並將它們顯示爲矩陣。如何乘以二維數組aka矩陣

電流輸出是

1 1 1 
1 1 1 
1 1 1 

這是不正確的結果。

的代碼如下:

static void Main(string[] args) 
    { 
     int[,] metrix1 = new int[3, 3] { { 2, 0, 2 }, { 0, 1, 2 }, { 1, 2, 1 } }; 
     int[,] metrix2 = new int[3, 3] { { 1, 1, 1 }, { 0, 1, 0 }, { 0, 0, 1 } }; 
     int[,] result = new int[3, 3]; 

     int m1 =0; 
     int m2 =0; 

     for (int i = 0; i < 3; i++) 
     { 
      for (int j = 0; j < 3; j++) 
      { 
       m1 = metrix1[i, j]; 

      } 
     } 

     // metrix 2 
      for (int y = 0; y < 3; y++) 
      { 
       for (int z = 0; z < 3; z++) 
       { 
        m2 = metrix2[y, z]; 
       } 
      } 
      //m 

       for (int a = 0; a < 3; a++) 
        { 

         for (int b = 0; b < 3; b++) 
         { 
         result[a, b] = m1 *m2; 
         Console.Write(result[a, b]); 

         }Console.WriteLine(); 
       }Console.ReadLine(); 

       } 
      } 
     } 
+1

僅使用兩個for循環 – Mahi

+1

'結果[A,B] = M1 *平方米;'每'result'元素設置爲無論是在'm1'倍無論是在'm2'。 'm1'和'm2'都是'1',因爲那是你陣列中最後一個元素。看看你的代碼在'm'這一行,在你的代碼中你已經運行了兩組double循環來完成,第一組的最後一次迭代將'1'分配給'm1' ,第二組的最後一次迭代將'1'分配給'm2',然後通過併爲'result'的每個元素分配'1 * 1'。 P.s.請在提問時使用正確的拼寫和語法。 – Quantic

回答

0

你接近這一錯誤。

for (int y = 0; y < 3; y++) 
     { 
      for (int z = 0; z < 3; z++) 
      { 
       m2 = metrix2[y, z]; 
      } 
     } 

在此之後,平方米將包含陣列(matrix[2, 2])的右下的值。你的字面意義是一次又一次地增加相同的值,以增加乘數。您需要將所有這些放在一個for循環中。

此外,這不是做矩陣乘法的正確方法。首先,你的代碼只能用於3x3矩陣;不僅可以有其他大小的矩陣(4x4,5x5等),矩陣甚至不必是方形的以便能夠相乘(只要列的數量等於行數其他)。即使他們都是這兩個3x3矩陣,計算仍然是錯誤的。 Wikipedia有一些正確的方法來做到這一點很好的例子。

2 0 2 1 1 1 (2*1)+(0*0)+(2*0) (2*1)+(0*1)+(2*0) ... 
0 1 2 x 0 1 0 = (0*1)+(1*0)+(2*0) (0*1)(1*1)(2*0) ... 
1 2 1 0 0 1 ..