java - 这哪里出了问题?线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : 5

标签 java arrays exception bounds

我正在尝试计算 Space[][] 中特定颜色的 Space 对象的数量。当我使用此方法来计算一行中特定颜色的对象数量时,它工作得很好:

public int countRowWhite(Space[][] board, int row)//TESTED//when counting in a row, the columns         go up the row stays the
//same,THIS GOES THROUGH THE ROW ADDING UP NUMBERS OF WHITES
{
    int count = 0;
    for(int column=0; column<board.length;column++)
    {
        if((board[row][column]).getColour().equals(spaceColour.White))
        {
            count+=1;
        }
    }
    return count;
}

但是,当我尝试此方法来计算列中的对象数量时,出现异常:

public int countColumnWhite(Space[][] board, int column)//when counting in a row, the columns go up the row stays the
//same,THIS GOES THROUGH THE ROW ADDING UP NUMBERS OF WHITES
{
    int count = 0;
    for(int row =0; column<board.length;row++)
    {
        if((board[row][column]).getColour().equals(spaceColour.White))
        {
            count+=1;
        }
    }
    return count;
}

我在以下测试方法中调用这两个方法:

public void testMethods()
   {
           Space[][] test = new Space[5][5];

   for(int i = 0; i < test.length; i++){
         for(int j = 0; j < test.length; j++){
              test[i][j] =  new Space(spaceColour.Null); 
         }
    }


   test[0][1].setColour(spaceColour.White); 
   test[0][2].setColour(spaceColour.Black); 
   test[2][1].setColour(spaceColour.Black); 
   test[2][2].setColour(spaceColour.Black); 

   System.out.println(countColumnWhite(test, 0));





   for(int row= 0; row<test.length;row++)
   {
       for(int column = 0; column<test.length;column++)
       {
           if (test[row][column].getColour().equals(spaceColour.White))
           {
               System.out.println("Whites at row: " + row + " and Column: "+ column);
           }
       }
   }

如果有帮助,异常始终等于二维数组“test”的行数和列数

最佳答案

我想这一行:

for(int row =0; column<board.length;row++)

应该是:

for(int row = 0; row < board.length; row++)

您的终止条件是检查column是否小于board.length,而它应该检查row是否小于 >板.长度。您不断增加 row,但终止条件永远不会成立,因此您最终会超出数组的范围。

另一件事是,您的代码隐式假设您正在使用方阵(即行数和列数相同的二维数组)。因此,如果行和列不相等,您也会遇到同样的问题。如果你的假设是有效的,那么这就很好。我想这是某种应该是正方形的游戏板。

关于java - 这哪里出了问题?线程中的异常 "main"java.lang.ArrayIndexOutOfBoundsException : 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20553297/

相关文章:

java - 这样做的正确方法是什么?

Python输出奇怪的字节数组

python - 移动Python数组中的行和列

Python 在父类(super class)中捕获错误,并在子类中跟踪它

java - 从字符串创建对象

javascript - 使用 GWT 通过 HTTP POST 下载文件

python - 在 numpy 中重新定义 *= 运算符

c# - 如何处理 "The notification platform is unavaible",系统异常

java - while 循环不会因异常而停止循环

java - 覆盖equals方法与创建新方法