2013-09-23 71 views
0

處理具有一維的數組非常簡單。但是我們如何避免在每行(鋸齒形陣列)上以不同長度的二維數組內測試超出範圍的位置呢?如何測試二維數組的邊界,以避免indexOutOfRangeException(C#)

這裏是我的代碼(如果有人想測試):

static void Main(string[] args) 
{ 
    object[][] x = weirdReturn(); 

    int k = 0; 
    while(x[0][k] != null) //THIS CODE PRODUCES THE EXCEPTION 
    { 
     for(int i = 0; i< x[k].Length; i++) 
     { 
      Console.Write("{0} ", x[k][i]); 
     } 
     Console.WriteLine(""); 
     k++; 
    } 


} 


static object[][] weirdReturn() 
{   
    DateTime d = new DateTime(); 
    d = DateTime.Now; 
    object[] a2 = { 'X', 1.79, d, 100 }; 
    object[] a1 = { 0, 'a', "objectX" }; 
    object[][] retVal = new object[2][]; 
    retVal[0] = a1; 
    retVal[1] = a2; 
    return retVal; 
} 
+0

你的循環完全是無稽之談。你想做什麼? –

+0

我應該更好地描述這個問題。最初我想把它放到現有的線程中。我想迭代在一個鋸齒狀的數組。一種矩陣,但具有不同長度的行。問題是我無法輕鬆找到有多少行。我知道在這種情況下有2個,但我想將這個問題推廣到更好的靈活性。 –

+0

'行數'是外部數組的長度,你可以通過調用'x.Length'來獲得長度。 –

回答

2

沒有神奇到這一點 - 簡單地檢查長度並避免索引超出值減去一個,就像使用一個單二維數組。

你的代碼看起來很凌亂,你只是想循環這樣的數組?

static void Main(string[] args) 
{ 
    object[][] x = weirdReturn(); 

    for (int i = 0; i < x.Length; i++) 
    { 
     for (int j = 0; j < x[i].Length; j++) 
     { 
      Console.Write("{0} ", x[i][j]); 
     } 
     Console.WriteLine(""); 
    } 
} 


static object[][] weirdReturn() 
{ 
    DateTime d = new DateTime(); 
    d = DateTime.Now; 
    object[] a2 = { 'X', 1.79, d, 100 }; 
    object[] a1 = { 0, 'a', "objectX" }; 
    object[][] retVal = new object[2][]; 
    retVal[0] = a1; 
    retVal[1] = a2; 
    return retVal; 
} 
+0

x.Length在這種情況下是3,這就是a1的長度。這實際上是問題,我需要矩陣中的行數,在這種情況下是2.我知道代碼是混亂的,這就是爲什麼我不知道如何計算出來的原因 –

+1

是不正確的,'x.Length'返回2給定weirdReturn方法的上述定義 –