2012-03-06 20 views
-2

これは答えをCに保存する行列積であり、C=A*Bです。では、Cの値はなぜ変更されませんか?このC#コードが失敗するのはなぜですか?

並列プログラミングでこのメソッドを使用して、各列が単一のスレッドで評価されるようにするため、各列を計算する特別な方法を使用します。私はこれまでにパスカルでこのようなことをテストしましたが、C#ではあらゆることが間違っています。

注:これは宿題用であり、このコードにはまだ並行していません。

class Program 
{ 
    private static int n = 2; 
    static int[,] A = new int[n, n]; 
    static int[,] B = new int[n, n]; 
    static int[,] C = new int[n, n]; 
    private static void Main(string[] args) 
    { 
     A[0, 0] = 2; A[0, 1] = 3; 
     A[1, 0] = 5; A[1, 1] = 1; 

     B[0, 0] = 3; B[0, 1] = 0; 
     B[1, 0] = 1; B[1, 1] = 0; 

     C[0, 0] = 0; C[0, 1] = 0; 
     C[1, 0] = 0; C[1, 1] = 0; 

     //Calculation 
     for (int z = 0; z < n; z++) 
     { 
      ComputeColumn(z); 
     } 
     PrintAnswer(C); 
     Console.ReadKey(); 
    } 
    private static void ComputeColumn(int n) 
    { 
     for (int i = 0; i < n; i++) 
     { 
      for (int k = 0; k < n; k++) 
      { 
       C[i, n] += (A[i, k] * B[k, n]); 
      } 
     } 
    } 
    private static void PrintAnswer(int[,] what) 
    { 
     for (int i = 0; i < n; i++) 
     { 
      for (int j = 0; j < n; j++) 
      { 
       Console.Write(what[i, j] + " "); 
      } 
      Console.WriteLine(); 
     } 
    } 
} 
+1

デバッガを使用して問題を簡単に診断できます。 – Msonic

+3

あなたの鼻の医師に相談してください! – sap

+1

ここでヒント - Cのどのセルに変更が見込まれますか? –

答えて

4

私は、これはかなり迅速に明るみに問題をもたらすことになると思い

private static int NumberOfColumns = 2; 
ComputeColumn(int currentColumn) 

ような、より意味のあるものにn

private static int n = 2; 
ComputeColumn(int n) 

の複数の用途の名前を変更してください。

+7

また、 "NumberOfColumns"のような意味があります。 DO_NOT_WRITE_CONSTANTS_LIKE_IT_IS_STILL_1972 –

+0

@EricLippert lolが同意した。私はおそらく、A、B、Cからの潜在的な感染以外のことは考えていません。 –

+0

このスタイルを使用することをお勧めする唯一の時間は、Win32定数ですが、これは金属の整合性のためです。そうでなければ、私は完全に同意する。 –

関連する問題