2011-06-27 18 views
1
class Board { 
    Direction[][] board; 
    Integer width; 
    Integer height; 

    Board(Integer width, Integer height) { 
     this.width = width; 
     this.height = height; 

     board = new Direction[width][height]; 

     for (Integer y = 0; y < height; y++) { 
      for (Integer x = 0; x < width; x++) { 
       board[x][y] = Direction.Down; 
      } 
     } 
    } 

    Direction direction(Integer x, Integer y) { 
     return board[x][y]; 
    } 

    void update(Integer x, Integer y) { 
     board[x][y].next(); 
    } 
} 

Direction枚舉值是:UpDown整個構建有相同的元素列表中的Java

首先,我要初始化我的板,使所有在板的每一個地方的初始值設置爲Down

其次,我想檢索在特定(X,Y)的值的所述板的

第三,我希望能夠在板的該特定元素來更新值的位置。 next()函數旨在將值從Down更改爲Up,反之亦然。這是分開申報的。

我相信我在做代碼編譯時做錯了事,但是我的程序不能正常工作。

+0

「但是我的程序不能正常工作,因爲它應該。」你能指定嗎? – toto2

+0

你的「棋盤」沒有正確初始化? – Kal

+0

@toto基本上,當我嘗試運行該程序時,我的空白屏幕上顯示的是相對背景色的「Down」。沒有其他發生。同樣,如果我將上面的'Direction.Up'設置爲其他顏色,但沒有任何反應。 – maclunian

回答

1

最有可能的,你想改變你的更新代碼爲:

board[x][y] = board[x][y].next(); 

當然,我假設了很多關於什麼是不與您的代碼的工作,但它是一個常見的錯誤,我見過之前。

3

如果問題是您的更新方法:

枚舉類型的值應該是不可變的。調用其上的next()方法可能會改變枚舉對象(取決於它的實現),但是當你在所有陣列位置使用同一個對象時,所有這些都會改變。

你可能想使用這樣的事:

board[x][y] = board[x][y].next(); 

enum Direction { 

    UP, DOWN; 

    public Direction next() { 
     if (this == UP) 
      return DOWN; 
     else 
      return UP; 
    } 
} 
+0

甚至更​​簡單:'return this == UP? DOWN:UP;' – Bohemian

+0

@Bohemian我和Pa @ elo Ebermann有類似之處,除了它在開始時並未公開。這會有什麼不同嗎? – maclunian

+0

@maclunian:問題不在於'next'方法,而是你如何調用它。您需要以某種方式使用該結果,方法是將其分配到電路板陣列的正確位置。 –

相關問題