2017-09-14 25 views
0

我有一個簡單的測試,看起來像在合適的位置配售對象(Java)的

public class Game { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     Board b1 = new Board(); 
     Knight bk = new Knight(Player.BLACK); 
     b1.placePiece(0, 0, bk); 
     System.out.println(b1.getPiece(0, 0)); 


    } 

} 

,這是應該打印出「BK」,因爲這被放置在(0,0)的電路板B 。但實際上它返回null。

我局級看起來是這樣的:

的getPiece應該返回船上片[X] [Y]但當然不會,因爲沒有什麼船上[X] [Y]。我知道什麼是錯,但我不知道如何解決這個問題。

我的一片類的樣子:

public abstract class Piece { 

    Player color; 
    int x, y; 

    Piece(Player color){ 
     this.color = color; 

    } 

... 

} 

所以,我不知道如何使它可能有板[X] [Y]正確的值,它是右邊那條對象。

編輯:

EDIT2:

public class Board { 


.... 

} 
+4

,你能告訴我們你的'placePiece'方法的代碼? –

+0

以及如何初始化Board.board – IddoE

+0

對不起,我錯過了。編輯! – user6792790

回答

1

需要初始化局

board = new Piece[rows][cols] 

考慮這樣做的構造

更新內部:

爲了讓名字,你應該增加成員名稱件類

abstract class Piece { 

     java.awt.Color color; 
     String name; 
     int x, y; 

     Piece(java.awt.Color color, String name) { 
      this.color = color; 
      this.name = name; 

     } 

     @Override 
     public String toString() { 
      return "Piece{" + 
        "color=" + color + 
        ", name='" + name + '\'' + 
        ", x=" + x + 
        ", y=" + y + 
        '}'; 
     } 
    } 

class Knight extends Piece { 

     Knight(Color color, String name) { 
      super(color, name); 
     } 

     @Override 
     public boolean equals(Object obj) { 
      Knight that = (Knight) obj; 
      return this.color == that.color && this.name.equals(that.name); 
     } 
    } 

重寫字符串將導致

System.out.println(new Knight(Color.BLACK, "Robin Hood")); 

打印

Piece{color=java.awt.Color[r=0,g=0,b=0], name='Robin Hood', x=0, y=0} 
+0

謝謝,但是回報板[x] [y]; getPiece方法實際上並不返回對象的名稱。我怎樣才能讓它返回對象的名稱? – user6792790

+0

@ user6792790嗯..你是什麼意思的「對象的名稱」?它返回對象的引用 – IddoE

+0

@ user6792790返回變量的名稱是不是真的可以在java中做的事 –