for(int k=0;k <= odds.GetLength(-1);k++)
위의 코드 줄은 Double 형식의 2 차원 배열을 반복하는 것으로 가정되지만 다음 예외가 계속 발생합니다. 예외 범위를 벗어나는 인덱스. 왜 누군가가 그 이유를 설명하고 해결책을 제공 할만큼 친절 할 수 있습니까? 많은 감사합니다.2 차원 배열을 반복 C#
for(int k=0;k <= odds.GetLength(-1);k++)
위의 코드 줄은 Double 형식의 2 차원 배열을 반복하는 것으로 가정되지만 다음 예외가 계속 발생합니다. 예외 범위를 벗어나는 인덱스. 왜 누군가가 그 이유를 설명하고 해결책을 제공 할만큼 친절 할 수 있습니까? 많은 감사합니다.2 차원 배열을 반복 C#
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];
절대적으로 환상적입니다! 고마워요! – user995689
루프의 조건부는 '<='대신 '<'를 지정해야합니다. 그렇지 않으면 인덱스 예외가 발생합니다. – John
@ 존 - 감사합니다. 당신은 직접 편집 할 것을 제안 할 수있었습니다 :) – Oded
는 odds
경우 2 차원 배열입니다, 치수는 0
및 1
입니다. -1
치수에 액세스하려고 시도하면 IndexOutOfRangeException
이 산출됩니다.
GetLength
은 0부터 시작합니다. GetLength(0)
번으로 전화 해보세요. 당신이 2 차원 배열에 반복하려는 데는 보통
음 :
for(int col = 0; col < arr.GetLength(0); col++)
for(int i = row; row < arr.GetLength(1); row++)
arr[col,row] = /*something*/;
배열은 항상 0을 기준으로하므로 -1 인덱스에서 뭔가를 얻으려고 노력의 이유가 없다.
나는 당신이 그것을 사용하려는 방법에 따라 하나 또는 두 가지 문제를 참조하십시오
첫째, GetLength (IND 차원) 2 차원 배열의 경우 0에서 시작하여, 지정된 차원의 길이를 반환, 올바른 인덱스는 0과 1이됩니다.
두 번째 문제는 루프 상태에 대해 < = < = 대신 마지막 인덱스가 길이가 아닌 길이가 아니기 때문에 범위를 벗어날 수 있다는 것입니다.
StriplingWarrior와 Gilad Naaman이 코드 예제를 게시 했으므로 생략하겠습니다.
<=와 함께 문제를 지적 해 주셔서 감사합니다. 지금까지 다른 문제가 있었지만 지금은 귀하의 의견이 도움이되었습니다. 타이. – user995689
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/>");
}
'odds'의 내용을 루프의 어느 시점에서 변경 하시겠습니까? – ChrisBint
더 많은 코드를 추가해야한다고 생각합니다. 아마 foreach를 사용할 수 있을까요? –
예 'code'win + = odds [1, k] * unitStake; 'code' – user995689