【问题标题】:Out of boundaries error with a 2D Array Java [closed]二维数组 Java 的越界错误 [关闭]
【发布时间】:2014-01-03 04:30:08
【问题描述】:

我正在制作一个连续四个游戏,其中行数和列数由玩家决定(所以可以是任何东西,只要超过四个)。因此用户输入存储在变量“行”和“列”中。该字段看起来像这样,所以第一行总是数字。

我对获胜者的搜索算法有疑问。 虽然我的水平搜索算法工作正常,但具有相同逻辑的垂直搜索给了我超出范围的错误。如果你能帮我找出错误,我将非常感激。谢谢! 1 2 3 4 5 |-|-|-|-| |-|-|-|-| |-|-|-|-|

public static String checkWinner(String [][]field){
//horizontally, which works
   for(int i=1; i<=rows; i++){
       for (int j=0; j<=column-1;j++){
           if (((j>=3 || j==column-1) && field[i][j]!="|_" && field[i][j]==field[i][j-1] && field[i][j]==field[i][j-2] && field[i][j]==field[i][j-3])
           || (field[i][j]!="|_" && field[i][j]==field[i][j+1] && field[i][j]==field[i][j+2] && field[i][j]==field[i][j+3]))
           {
               return field[i][j];
           }
       }
    }


//vertically which doesn't work

   for(int i=0; i<column; i++){
      for (int j=1; j<=rows-1;j++){
         if (((j>=4 || j==rows-1) && field[j][i]!="|_" && field[j][i]==field[j-1][i] && field[j][i]==field[j-2][i] && field[j][i]==field[j-3][i])
         || (field[j][i]!="|_" && field[j][i]==field[j+1][i] && field[j][i]==field[j+2][i] && field[j][i]==field[j+3][i]))
         {
            return field[i][j];
         }
      }
   }
   return null;
}

【问题讨论】:

  • 请正确格式化您的代码,在当前状态下尝试通读非常痛苦
  • 注意:field[i][j]!="|_"。这不是您比较字符串的方式。使用equals()
  • rowscolumn的值是什么
  • 它们是用户给定的,所以可以是任意整数(但大于4才能玩游戏)。

标签: java multidimensional-array indexoutofboundsexception


【解决方案1】:

在您的水平循环逻辑中,您正在从 j=0 to column-1
运行您的列循环,但随后您正在访问 field[i][j] ,其值将超出 j+1, j+2, j+3 之类的 column

例如:用户输入column 值为5,但您在j=4i=0j+2 逻辑将使其访问第6 列(field[0][6]),这显然是OutOfBound

在垂直循环逻辑中检查 rows 值是否存在相同错误

注意:比较字符串使用equals()而不是equality operators like ==

【讨论】:

  • 感谢您的回答。但实际上,这种横向检查是有效的。行和列是用户输入的,关于他希望他的字段有多大。但后来我使用从 0 到 column-1 的索引创建了一个矩阵。
  • @javaniewbie 你的意图是正确的,但你必须阻止你的逻辑检查一个不存在的位置 - 顺便说一下你在编写任何游戏
  • 这就是我仍然不明白的原因,因为我看不到我在哪里检查不存在的位置,以及水平工作和垂直不工作的原因。 ..是的,我正在开发连接四游戏。
  • 谢谢sansix,我会继续努力的。
猜你喜欢
  • 2014-03-13
  • 2013-02-25
  • 1970-01-01
  • 2021-05-26
  • 2013-04-02
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2019-11-02
相关资源
最近更新 更多