我收到此错误:
System.IndexOutOfRangeException:“索引在数组的边界之外。”
int a = 2;
int[] nt = new int[100], d = new int[100];
d[0] = nt[0] = 3;
d[1] = nt[1] = 5;
for (int i = 7; i < 100; i += a)
{
for (int j = 0; nt[j] < i; j++)
{
if (d[j] != 0)
{
d[j]--;
}
else
{
d[j] = nt[j];
// -->error: nt[k]<i
for (int k = j + 1; nt[k] < i; k++)
您能帮我解决代码吗?
答案 0 :(得分:0)
最后一行缺少k
的范围测试。如果没有nt[k]
小于i
,则k
会超出范围,即最终会变得大于或等于100。
for (int k = j + 1; k < 100 && nt[k] < i; k++)
由于C#使用短路评估,所以测试k < 100 && nt[k] < i
仅在第一部分nt[k] < i
为k < 100
时评估第二部分true
。这样可以防止访问索引大于或等于100的nt
。
另请参阅:
100
是魔术数字。为此声明一个常量。
const int N = 100;
int[] nt = new int[N];
...
for (int k = j + 1; k < N && nt[k] < i; k++)
但是我不知道您的代码的上下文。您可能会使用比N
更好的名称。
请参阅:Writing Clean Code and Magic Numbers(C#角)。