2011-11-18 9 views
11
for(int k=0;k <= odds.GetLength(-1);k++) 

上記のコード行は、Double型の2次元配列を反復処理すると仮定されていますが、次の例外がスローされます。範囲外の例外のインデックス。理由を説明して解決策を提供するのに十分親切な人がいるでしょうか?どうもありがとう。2次元配列を反復するC#

+0

ループ内のどの時点でも「オッズ」の内容を変更していますか? – ChrisBint

+0

私はもっとコードを追加すべきだと思います。多分あなたはforeachを使うことができますか? –

+0

はい、次のように 'code'win + = odds [1、k] * unitStake; 'code' – user995689

答えて

35

無効なインデックスをGetLengthに渡しています。多次元配列のディメンションは0に基づいているため、-1は無効で、負の数(または次元数-1より大きい数値)を使用するとIndexOutOfRangeExceptionが発生します。

最初の次元を超えるこの意志ループ:あなたが第二の次元を通過する別のループを追加する必要があります

for(int k=0;k < odds.GetLength(0);k++) 

oddsは、2次元配列である場合

for(int k=0;k < odds.GetLength(0);k++) 
    for(int l=0;l < odds.GetLength(1);l++) 
     var val = odds[k,l]; 
+0

絶対に素晴らしいです!どうもありがとうございました! – user995689

+0

ループの条件部分は '<='の代わりに '<'を指定する必要があります。そうしないと、インデックス例外が発生します。 – John

+0

@ジョン - ありがとう。 – Oded

3

は、そのサイズは01となります。ディメンション-1にアクセスしようとすると、IndexOutOfRangeExceptionが返されます。

1

GetLengthはゼロベースです。 GetLength(0)に電話してみてください。あなたは2次元配列に反復処理したいusualy

3

まあ、:

for(int col = 0; col < arr.GetLength(0); col++) 
    for(int i = row; row < arr.GetLength(1); row++) 
     arr[col,row] = /*something*/; 

配列は常にゼロベースなので、-1インデックスで何かを取得しようとしているのも意味がありません。私はあなたがそれを使用する方法に応じて、1つのまたは2つの問題参照

0

まずオフ、GETLENGTH(IND寸法)は、二次元アレイの場合、0から開始して、指定された次元の長さを返します正しいインデックスは0と1になります。=ループ条件の代わりに< =を実行しています。最後のインデックスは長さではなく長さであるため、範囲外になる可能性があります。

StriplingWarriorとGilad Naamanはコード例を掲載しましたので、私はそれを省略します。

+0

問題を指摘してくれてありがとうございました。これまで私が持っていた他の問題では明らかになっていませんでしたが、あなたのコメントが助けになりました。 Ty。 – user995689

2
string[,] arr = new string[2, 3]; 
     arr[0, 0] = "0,0"; 
     arr[0, 1] = "0,1"; 
     arr[0, 2] = "0,2"; 

     arr[1, 0] = "1,0"; 
     arr[1, 1] = "1,1"; 
     arr[1, 2] = "1,2"; 

     for (int i = 0; i < arr.GetLength(0); i++) 
     { 
      for (int j = 0; j < arr.GetLength(1); j++) 
      { 
       Response.Write(string.Format("{0}\t", arr[i, j])); 
      } 
      Response.Write("<br/>"); 
     }