-1

少し奇妙なもの。ボード ゲーム (バックギャモン) を作成しようとしていて、piece というオブジェクトを作成しました。私のボードで、ピースの配列リストを作成しようとしています

ArrayList<piece> pieces = new ArrayList<piece>();

piece newPiece = new piece(1, 1, "red", "top");
piece newPiece2 = new piece(1, 2, "black", "top");

pieces.add(newPiece);
System.out.println(newPiece.getCol());
pieces.add(newPiece2);
System.out.println(newPiece2.getCol());

出力が「赤」の次に「黒」になることを期待していましたが、実際には「黒」の次に「黒」になりますか? なぜこれが起こっているのでしょうか?

4

1 に答える 1

9

これArrayListはここのニシンです - あなたは二度とピースを取り出すことさえありません. 次のコードだけでも、まったく同じ動作が見られます。

piece newPiece = new piece(1, 1, "red", "top");
piece newPiece2 = new piece(1, 2, "black", "top");
System.out.println(newPiece.getCol());
System.out.println(newPiece2.getCol());

バグはpieceクラスにあると強く思います。色を保存するために使用している変数は、おそらくインスタンス変数ではなく静的変数です。静的変数は、型の特定のインスタンスではなく型に関連しているため、コンストラクターで静的変数の値を上書きすると、再度フェッチすると常にその値が表示されます。インスタンスごとに異なる状態が必要なため、インスタンス変数が必要です。

(さらに、名前を改善する必要があります。たとえば、Pieceの代わりにpiece、およびgetColorの代わりにgetCol。)

于 2013-10-14T16:06:17.467 に答える