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

上面的代碼行應該遍歷Double類型的二維數組,但會一直拋出以下異常。索引超出範圍例外。有人會善意解釋爲什麼並提供解決方案。非常感謝。迭代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++) 

您需要添加另一個循環都要經過第二個維度:

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

@John - 謝謝。你可以建議直接編輯:) – Oded

3

如果odds是一個二維數組,那麼它的尺寸將被稱爲01。嘗試訪問維度-1將產生一個IndexOutOfRangeException

1

GetLength是從零開始的。嘗試撥打GetLength(0)

3

好,usualy當你要遍歷一個二維數組:

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

數組是始終從零開始,所以沒有嘗試在-1指數得到的東西點。

0

我看到一個或兩個問題根據打算如何使用它:

首先,對GetLength(IND尺寸)返回指定的尺寸的長度,從0開始在一個二維陣列的情況下,正確的索引將是0和1.

第二個問題是,您正在做< =而不是< for循環條件,這可能也超出了自上一個索引是長度爲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/>"); 
     }