2013-09-23 44 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方法的上述定义 –