哪里出错了?线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:5

时间:2013-12-12 20:13:25

标签: 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);
           }
       }
   }

如果有帮助,异常总是等于2d数组'test'具有的行数和列数

1 个答案:

答案 0 :(得分:3)

我想这一行:

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

应该是:

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

您的终止条件是检查column是否小于board.length,应该检查row是否小于board.length。你继续递增row,但是终止条件永远不会成立,所以你最终会超出数组的范围。

另一件事是你的代码隐含地假设你正在使用方阵(即2-d数组相同数量的行和列)。因此,如果您有不相等的行和列,您将遇到相同的问题。如果你的假设是有效的,那么这很好。我想这是一种应该是正方形的游戏板。