OOP 디자인에 체스 프로그램을 쓰고 있으며 코드를 리팩토링하려고합니다. 첫 번째 과제는 모든 int x 및 int y 조합을 int x 및 int y 정보가 포함 된 Pair 객체 (쌍 위치)로 그룹화하는 것이 었습니다.리팩토링 int x, int y to Pair 위치 (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 객체를 만드는 가정입니다, 그러나 이것은 단지 코드가 더러운하게하고 리팩토링되지 않습니다.
내 접근 방식을 수정할 수 있습니까?
왜 두 숫자 주위에 괄호를 넣으면 마술처럼 'Point'객체가 될 것이라고 생각합니까? 'board.placePiece (new Point (4, 3), n1)'을 대신 사용해보십시오. – Andreas
그것이 사용되는 방법입니까? 보다 단순하게 만드는 더 좋은 방법이 있을까요? 모든 테스트 케이스에 새로운 포인트를 두는 것은 훨씬 더 복잡한 것으로 간주됩니다. – user6792790
예, 그렇기 때문에 '점'이 사용되어야합니다. --- "더 간단하게"정의하십시오. 원래 코드는 간단하게 호출 할 수 있었지만, 왜 그렇게 대답하지 않았습니까? – Andreas