【问题标题】:How to avoid index outside of bound of the array?如何避免索引超出数组范围?
【发布时间】:2016-07-22 09:48:26
【问题描述】:

我正在制作一个黑白棋/黑白棋游戏,我使用二维数组来保存棋盘上每个空间的内存。

为了检查有效的移动,我使用了一个 if 语句,我使用 r+1 来检查同一行上的下一个空格。然而,由于数组只有 [8, 8] 大,当我遇到 r 为 8 的情况时,我会收到错误,因为它正在尝试检查数组中的第 9 个元素。这给了我一个索引越界错误。

想知道解决此问题的最佳方法是什么?我想也许可以交换到一个列表,但我不确定这是否适用于二维数组?

public box[,] grid = new box[8, 8];

if ((grid[r + 1, c].value == currentPlayer)
        {
            return true;
        }

【问题讨论】:

  • 如何避免?检查索引是否不在边界之外。 :-)
  • 考虑使用Length属性或Length()方法
  • 使用 const 作为 Array 的大小,以便验证大小。常量 int SIZE = 8;
  • 您可以为游戏领域创建一个单独的类。该字段只能通过为您进行边界检查的特定方法访问。这样你只需要实现一次检查逻辑。

标签: c# arrays indexing bounds


【解决方案1】:

您只需检查r + 1 是否为合法索引。有一个列表将无济于事,因为您仍然会检查列表范围之外的内容。所以你只需要:

if (r + 1 > 7) return false;

你知道你的数组的大小。但是,为了避免“幻数”,您最好获取数组第一维的上限:

if (r + 1 > grid.GetUpperBound(0)) return false;

您可以执行相同的操作来检查 c 是否在界限内:

if (c < 0 || c > grid.GetUpperBound(1)) return false;

【讨论】:

    猜你喜欢
    • 2018-06-18
    • 2023-03-27
    • 1970-01-01
    • 2023-03-09
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多