現在、Javaを使用してチェスゲームを行っていますが、問題が発生しました。チェス盤のすべてのフィールドでは、次のように入力して取得することができ、その上にチェスの駒、必要がある場合があります:ピースを移動するときに今Java:ある変数から別の変数にコンテンツを移動する
field.getPiece() //null or Piece-object
を、私はこのようにそれをやってみたかった:
field2.setPiece(field1.getPiece());
field1.setPiece(null);
問題は、フィールド1がピースの参照を保持し、ピースが削除されるようにヌルで上書きすることです。だから私の質問です:どのように私は同じ参照で両方の変数を指すことなく、別のものへのコンテンツ/参照を移動するのですか?
Btw:私は自分の作品をクローンして古いものを削除することができますが、もっと効率的なやり方があると思います。
EDIT: 関連するコード:
public class Field {
private Piece piece;
public Piece getPiece(){ return piece; }
public void setPiece(Piece piece){
this.piece = piece;
piece.setField(this); //Tell the piece on what field it is (to get position etc.) [LINE 53]
}
}
public abstract class Piece {
protected Field field;
public void setField(Field field){
this.field = field;
}
}
field2.setPiece(field1.getPiece());
field1.setPiece(null);
エラー:コード(field1.setPiece(null);
)の最後の行を削除すると、それは(それがクラッシュしない)
java.lang.NullPointerException: Attempt to invoke virtual method 'void [...].Piece.setField(Field)' on a null object reference
at [...].Field.setPiece(Field.java:53)
作品
EDIT2:答えを受け取った後、そこに私のアイデアが完全に間違っていて、そのエラーは単純な問題によって引き起こされたことに気付きました...
私はあなたの 'fieldX'クラスのコードを示しています。オブジェクトに 'Piece'インスタンスへの参照がある場合、' Piece'変数の参照を 'field1'で' null 'に設定すると、 'Piece'オブジェクト自体に何もしてはいけません。*' field1.setPiece (null) 'が** ** field2.setPiece(field1.getPiece())'の前に**呼び出されます。 – Mena
@Mena Ok、関連コードと例外を共有します... – Unknown