Use*_*r05 -2 c# foreach indexoutofboundsexception
我在尝试使用 foreach 循环打印数组值时在运行时收到“System.IndexOutOfRangeException:'索引超出数组范围。'”错误。我在 Visual Studio 中调试了问题,可以看到 foreach 中的 i 将持续到超出范围的 7。foreach 循环会自动获取数组的所有元素,所以请帮助我理解错误的原因?下面是函数:
void Sort(int[] A)
{
for (int i = 1; i < A.Length; i++)
{
int key = A[i];
int j = i - 1;
while (j >= 0 && A[j] > key)
{
A[j + 1] = A[j];
j = j - 1;
}
A[j + 1] = key;
}
foreach (int i in A)
Console.Write(A[i].ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
}
小智 5
我认为您误解了 foreach 循环的用法。改变-
foreach (int i in A)
Console.Write(A[i].ToString());
Run Code Online (Sandbox Code Playgroud)
到-
foreach (int i in A)
Console.Write(i.ToString());
Run Code Online (Sandbox Code Playgroud)
在上面的循环中i是一个元素,A而不是元素的索引。For 循环将为您提供索引:
for (int i = 0; i < A.Length; i++)
Console.WriteLine(A[i].ToString());
Run Code Online (Sandbox Code Playgroud)
考虑这个例子来理解 for 循环和 foreach 循环的用法:
int[] test = { 9, 8, 7, 6, 5, 4 };
foreach (int i in test)
Console.WriteLine(i);
Console.WriteLine();
for (int i = 0; i < test.Length; i++)
Console.WriteLine(i);
Console.WriteLine();
for (int i = 0; i < test.Length; i++)
Console.WriteLine(A[i]);
// Output:
// 9
// 8
// 7
// 6
// 5
// 4
//
// 0
// 1
// 2
// 3
// 4
// 5
//
// 9
// 8
// 7
// 6
// 5
// 4
Run Code Online (Sandbox Code Playgroud)
还要注意,.ToString()当你想打印一个整数时不需要。只是写Console.WriteLine(myInteger);。
| 归档时间: |
|
| 查看次数: |
740 次 |
| 最近记录: |