【问题标题】:Checking for ArrayIndexOutOfBounds Java检查 ArrayIndexOutOfBounds Java
【发布时间】:2014-01-02 13:56:51
【问题描述】:

我有一个 3x3 整数数组(0 或 1):int[][] matrix。目标是通过假设 0 是墙来通过 0 和 1 的迷宫(矩阵)。我不知道如何去检查邻居。

例如,从[0][0] 开始并在其上方检查,我需要执行以下操作:

if (currentPosition.getColumn()-1 != null && !checkIfWall[getRow()][getColumn()-1]) { //do stuff }

其中 checkIfWall 是墙壁的布尔二维数组或不是墙壁。问题是checkIfWall 在任何值为 -1 时返回 ArrayOutOfBounds。另外,我还得写另外三个 if 语句来检查下、左、右,这看起来很乏味。有没有更好的方法来做到这一点?

【问题讨论】:

  • 你为什么允许 getRow()getColumn() 分别返回 -1 和 0,开始?
  • 为什么只有 0 和 1 的 int[] 并且还有代表相同事物的布尔数组?
  • getRow 和getColumn 获取当前位置。我想你可以让 int[][] 矩阵只检查它是 1 还是 0 而不是布尔值

标签: java multidimensional-array indexoutofboundsexception


【解决方案1】:

我这样做的方法是假设数组外的任何位置都是一堵墙 - 因此您可以创建一个函数来进行碰撞测试并检查其中的边界。

 boolean isWall(int x, int y) {
     if (x<0||x>3)
        return true;
     if (y<0||y>3)
        return true;
     return data[x][y]==0;
 }

现在您只需调用 isWall 获取您喜欢的任何坐标,它永远不会出错,因此您无需担心您在所有其他算法中的位置 - 迷宫之外的任何内容始终被视为墙。

【讨论】:

    【解决方案2】:

    首先,我认为您混淆了方向……您将“向上”视为“-1”,但通常在二维数组中发生的情况是左上角为 0,0。随着“y”的增长,它会“下降”。

    无论如何,关于您的问题,我将通过一种简单地获取当前位置和方向(上、下、右、左、字符串或更好的枚举)的方法来解决这个问题。您的文件中应该有一个大小的全局变量,因此您可以验证您是否处于“有效”状态,如果您尝试检查数组“外部”的值,它应该返回 false(视为墙,因为你不能走那条路)。

    这也会使您的代码具有可读性。例如:if (isValid(this, up)) go up... 等等……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 2013-07-04
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-30
      相关资源
      最近更新 更多