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

위의 코드 줄은 Double 형식의 2 차원 배열을 반복하는 것으로 가정되지만 다음 예외가 계속 발생합니다. 예외 범위를 벗어나는 인덱스. 왜 누군가가 그 이유를 설명하고 해결책을 제공 할만큼 친절 할 수 있습니까? 많은 감사합니다.2 차원 배열을 반복 C#

+0

'odds'의 내용을 루프의 어느 시점에서 변경 하시겠습니까? – 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

@ 존 - 감사합니다. 당신은 직접 편집 할 것을 제안 할 수있었습니다 :) – Oded

3

odds 경우 2 차원 배열입니다, 치수는 01입니다. -1 치수에 액세스하려고 시도하면 IndexOutOfRangeException이 산출됩니다.

1

GetLength은 0부터 시작합니다. GetLength(0) 번으로 전화 해보세요. 당신이 2 차원 배열에 반복하려는 데는 보통

3

음 :

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

배열은 항상 0을 기준으로하므로 -1 인덱스에서 뭔가를 얻으려고 노력의 이유가 없다.

0

나는 당신이 그것을 사용하려는 방법에 따라 하나 또는 두 가지 문제를 참조하십시오

첫째, GetLength (IND 차원) 2 차원 배열의 경우 0에서 시작하여, 지정된 차원의 길이를 반환, 올바른 인덱스는 0과 1이됩니다.

두 번째 문제는 루프 상태에 대해 < = < = 대신 마지막 인덱스가 길이가 아닌 길이가 아니기 때문에 범위를 벗어날 수 있다는 것입니다.

StriplingWarrior와 Gilad Naaman이 코드 예제를 게시 했으므로 생략하겠습니다.

+0

<=와 함께 문제를 지적 해 주셔서 감사합니다. 지금까지 다른 문제가 있었지만 지금은 귀하의 의견이 도움이되었습니다. 타이. – 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/>"); 
     }