2016-11-14 10 views
0

私は、2次元配列の形で初期データマップを取得する金探査プログラムを作成しようとしています。それ。平均を計算すると "System.IndexOutOfRangeException"例外が発生する

しかし、探査のポイントをマークするかどうかを判断する平均を計算すると、私は "System.IndexOutOfRangeException"例外が発生し、プログラムが中断します。これを修正するにはどうすればいいですか?事前に助けていただきありがとうございます。

for (int i = 1; i < nRows; i++) 
     { 
      for (int j = 1; j < nCols - 1; j++) 
      { 
       //it is at the line below where the program breaks 
       double average = (data[i - 1, j] + data[i + 1, j] + data[i, j - 1] + data[i, j + 1])/4; 


       if (data[i, j] > average) 
       { 
        map[i, j] = "*"; 
       } 
      } 
     } 
+0

タグCがこの質問に適していますか? Cは例外を持っていません –

+0

ええ、それはアメリカのキーボードに慣れているので、私は入力キーを押したので、私はハッシュキーを打つと思っていた。 – CuriousLekgolo

+0

外側のループの終わりにある 'i == nRows - 1'のとき、' data [i + 1、j] 'はおそらく範囲外です。 – deamentiaemundi

答えて

2

2次元配列の境界から外れます。だからあなたのコードのこの部分を変更します。

for (int i = 1; i < nRows; i++) 
    { 
     for (int j = 1; j < nCols - 1; j++) 

for (int i = 1; i < nRows - 2; i++)     // NOT from 0 to nRows - 1 
    { 
     for (int j = 1; j < nCols - 2; j++)   // NOT from 0 to nCols - 1 

にあなたが国境を省略します。

+0

あなたは正しいです。ありがとうございました! – CuriousLekgolo