2013-12-12 79 views
0

我想要計算特定顏色的空間[] []中的空間對象的數量。當我用這個方法來計算連續特定顏色的物體的數量,它工作正常:這是哪裏出錯?線程「main」中的異常java.lang.ArrayIndexOutOfBoundsException:5

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陣列「測試」的列數有

+0

你確定'countRowWhite'的工作原理應該如何?如果你的數組有相同數量的行和列,它會工作正常,但是在一般情況下,你應該替換使用'for(int column = 0; column Pshemo

+0

總是相同的行數和列數:) – user2969516

回答

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數組相同數量的行和列)。所以如果你有不同的行和列,你會遇到同樣的問題。如果你的假設是有效的,那麼這很好。我想這是一種應該是方形的遊戲板。

+0

謝謝,我一直盯着這個年齡,視若無睹 – user2969516

+0

@ user2969516發生在每個人:) –

+1

此外,兩者都檢查相同的維度,其中工作在一個二維矩陣的情況,但如果行數和列數不相等將會失敗。 –

相關問題