私はOOPデザインでチェスプログラムを書いています。私は自分のコードをリファクタリングしようとしています。最初の課題は、すべてのint xとint yの組み合わせをint xとint y情報を含むPairオブジェクト(ペア位置)にグループ化することでした。リファクタリングint x、int yからペア位置(Java)
だから私のボードクラスは、もともと
public class Board {
public static final int NUM_OF_ROWS = 8;
public static final int NUM_OF_COLS = 8;
int x, y;
//Initialization of NUM_OF_ROW x NUM_OF_COLS size of 2d Piece array
Piece[][] board = new Piece[NUM_OF_ROWS][NUM_OF_COLS];
public Piece getPiece(int x, int y) {
return board[x][y];
}
....
のようなものが見えました。
そして私は
public Piece getPiece(int x, int y) to public Piece getPiece(Point pos)
public void placePiece(int x, int y, Piece pieceToPlace) to public void placePiece(Point pos, Piece pieceToPlace)
新しいパラメータを持つように
int x, y;
Point position = new Point(x, y)
そして、すべてのメソッドのように見えるように
int x, y;
を変更しようとしましたが、私が持っていた問題がでましたテスト。私のテスト例
一つは、私はint型のx int型のyのパラメータを使用
public void correctMovementTest() {
Knight n1 = new Knight(Player.UP);
board.placePiece(4, 3, n1);
board.movePiceTo(2, 2, n1);
assertEquals(board.getPiece(4, 3), null);
assertEquals(board.getPiece(2, 2), n1);
}
のように見えました。基本的にピースをx = 4とy = 3に置き、x = 2とy = 2に移動し、正しく移動したかどうかを確認します。
しかし、私は
public void correctMovementTest() {
Knight n1 = new Knight(Player.UP);
board.placePiece((4, 3), n1); // changed
board.movePiceTo((2, 2), n1); //changed
assertEquals(board.getPiece((4, 3)), null); // changed
assertEquals(board.getPiece((2, 2)), n1); // changed
}
に見えるように、これを変更しようとすると、今では私は本当に理解していない「引数の左辺は変数でなければなりません」と言って私にエラーを与えます。
私が働くだろう
Point pos = new Point(4,3);
のような新しいPointオブジェクトを作成すると仮定していますが、これは単にコードが汚くなり、リファクタリングされていません。
私のアプローチを修正してもらえますか?
なぜ2つの数字の周りにかっこを入れると、魔法のように 'Point'オブジェクトになると思いますか?代わりに 'board.placePiece(new Point(4、3)、n1)'を試してみてください。 – Andreas
それはそれがどのように使用されるのでしょうか?よりシンプルにするためのより良い方法があるだろうか?すべてのテストケースに対して新しいポイントを設定することはさらに複雑になると考えられます。 – user6792790
はい、そういう意味で「ポイント」が使われるはずです。 ---「よりシンプル」を定義します。元のコードは簡単に呼び出すことができましたが、なぜそれは答えではありませんか? – Andreas