2013-09-23 1 views
0

하나의 차원을 가진 배열을 처리하는 것은 매우 간단합니다. 그러나 각 행 (지그재그 배열)마다 길이가 다른 2 차원 배열 내의 범위 위치를 테스트하지 않으려면 어떻게해야합니까? 단순히 길이를 확인하고는 단색으로 당신처럼, 그 값을 뺀 하나 이상의 색인을 피하기 - 마법이에 없다bidimensional 배열의 경계를 테스트하여 피하는 방법 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

'rows'의 수는 외부 배열의 길이이며,'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

이 올바르지 않으면, 위의''weirdReturn'' 정의에 따라'x.Length'는 2를 리턴합니다 –

관련 문제