【问题标题】:'Index was outside the bounds of the array.''指数数组的边界之外。'
【发布时间】:2018-06-08 02:11:54
【问题描述】:

我有一个 3X3 数组 byte[,] grid = new byte[3,3]; 并且可以在我的程序中正常访问它,但是当我尝试通过循环查找横向行的总数时,我得到一个错误“索引超出了数组的范围。”。我知道这意味着什么,但我不明白为什么我会得到它。

        total = 0;
        for (byte xy = 2; xy >= 0; xy-=1) {
            total += grid[xy, xy]; //this is were i get the error
        }

【问题讨论】:

  • byte 未签名,因此它从0 变为255
  • 字节无符号。所以当 xy 为零时,xy - 1 将是 255
  • >= 0 应该是x > 0
  • 因为字节是无符号的,xy 将永远是>=0
  • >= 0 更改为> 0 将导致循环错过最后一次迭代grid[0, 0]

标签: c#


【解决方案1】:

遍历循环:

第一个:xy = 2

第二个:xy = 1

第三个:xy = 0

第四个:xy = 255

0 - 1 = 255,因为您的循环变量 xy 是一个字节,它不能表示负值,只能表示 0 到 255。

要修复您的循环,您可以将 xy 更改为 int。这样它可以表示一个负值,允许条件 xy >= 0 返回 false 并退出循环。

for (int xy = 2; xy >= 0; xy-=1) {
    total += grid[xy, xy];
}

【讨论】:

    猜你喜欢
    • 2011-04-15
    • 2018-10-26
    • 2014-06-05
    相关资源
    最近更新 更多