2017-05-25 104 views
0

在我的CS類的跳棋遊戲中,我遇到了計算棋盤上特定顏色棋子的數量的麻煩。 下面是getter方法:計算二維數組中特定對象的數量Java

public int getCheckersBlue() 
{ 
    int counter = 0; 
    for(int x = 0; x <= 8; x++) 
    { 
     for(int y = 0; y <= 12; y++) 
     { 
      if(c[x][y].equals(Color.BLUE)) 
      { 
       counter++; 
      } 
     } 
    } 
    return counter; 
} 

對C的構造:

private CheckersBoard[][] c = new CheckersBoard[8][8]; 

每當試圖運行遊戲在Greenfoot中,即使代碼編譯一個空指針異常被拋出。即使宣佈了一切,一切都有其指向的東西。有什麼建議麼?

+0

的【什麼是一個NullPointerException,如何解決呢?(可能的複製https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do- i-fix-it) –

+0

請注意,使用'c'構造函數,您正在創建'CheckersBoard' objects_的陣列_array,這可能不是您想要的結果。 – rrobby86

+0

1-空指針:c似乎在位置[ 0] [0],[0] [1] ..等等。 2-代碼看起來不正確,因爲你只初始化8的數組,但是你想迭代12次,所以如果你修復空指針,你會得到ArrayIndexOutOfBoundsException。 – justMe

回答

0

我看到你的代碼有兩個主要問題:

  1. 你迭代0-8元素x和0-12爲Y,但在聲明中,您爲x和同樣有0-7對於y
  2. NullPointerException。這是因爲數組聲明會用空值填充你的數組,所以你比較nullColor.Blue這是不正確的。

隨着這兩個補丁代碼看起來像這樣

public int getCheckersBlue() 
{ 
    int counter = 0; 
    for(int x = 0; x < 8; x++) 
    { 
     for(int y = 0; y < 8; y++) 
     { 
      if(Color.BLUE.equals(c[x][y])) 
      { 
       counter++; 
      } 
     } 
    } 
    return counter; 
} 

但我認爲它仍然是邏輯上不正確。

0

好了,有幾個事情......

  1. 你到12,每次迭代的內部循環,當它應該是8

  2. Color.Blue是JavaFX Paint,我相信。這不是你應該使用的。除非你自己製作了Color的Enumeration type,否則你應該這樣做。這裏有一個link的相關例子。

  3. 您正在檢查兩種不同類型的相等性:CheckersBoardColor。如果我們希望完全符合我們的命名規則,則應該有CheckersBoard.getSpace(x, y).getColor()CheckersBoard.getSpace(x, y).getOccupancy()(其應該具有空位選項)。