지금까지 훌륭한 제안. 다른 사람의 떨어져 구축, 당신은 또한 당신의 왼쪽 (1, 1)
에 액세스하기를 원한다면 (호출하여이 디자인을 고수하는 경우, 당신은 그리드 항목에 액세스 할 수
enum Direction {
LEFT(-1, 0),
UPPERLEFT(-1, -1),
DOWN(0, - 1),
...;
public final int xoffset;
pubiic final int yoffset;
Direction(int xoffset, int yoffset) {
this.xoffset = xoffset;
this.yoffset = yoffset;
}
public static GridObject getRelativeItem(GridObject[][] grid, int x, int y, Direction dir) {
return grid[x + dir.xoffset][y + dir.yoffset];
}
public static void setRelativeItem(GridObject[][] grid, int x, int y, Direction dir, GridObject newValue) {
grid[x + dir.xoffset][y + dir.yoffset] = newValue;
}
}
오프셋의 열거를 만들 수 있습니다 설정하려면
Direction.getRelativeItem(grid, 1, 1, LEFT)
, 당신은 마찬가지로이 값을 설정하기 위해 호출 할 수 있습니다.이 어색하고 인정 하듯이 가난한 추상화의 냄새하지만
Direction.setRelativeItem(grid, 1, 1, LEFT, myValue)
을 또는 당신이 (오프셋에 대한 게터를 정의 할 수 있습니다 전용 변수 값을 반환하는 인스턴스 메서드 xoffset
및 yoffset
을 추가하십시오. 그런 다음 정적 객체 인 LEFT, UPPERLEFT, DOWN이 cricket_007의 솔루션과 비슷합니다. 당신이 가치를 원한다면이 경우, 당신은 당신이 열거 자신을 인스턴스화 할 수 없습니다,
grid[x + LEFT.xoffset()][y + LEFT.yoffset()]
이 정의에
grid[x + LEFT.xoffset()][y + LEFT.yoffset()] = myValue;
설정하기 위해 호출 할 수 있습니다. Enums are initialized by the JVM이며 고정 된 숫자 만 있습니다 (이 경우 LEFT, UPPERLEFT, DOWN ...).
나는 enum을 이해한다고 생각한다. 내 기본 클래스에서 열거 형을 생성/참조/사용하는 방법에 대한 몇 가지 간단한 줄을 보여줄 수 있습니까? 예를 들어 특정 위치의 값을 변경하려는 경우 – Michael
좀 더 자세한 정보로 내 대답을 업데이트했습니다. 나는 개인적으로 게터를 추가 할 것입니다 (조금 나아 보이지만 여전히 좋지는 않습니다). 배열 접근 자 연산자에서 연산을 수행 할 수 있지만 casting은 표현식을 평가하지 않습니다. 나는 당신의 대답으로'grid [row] [(int) location] = 500'을 발견했다. 이것이 작동하지 않는 이유는 Runtime Java가 문자열 "col - 1"을 int로 캐스팅하려고 시도하기 때문입니다 (단순한 숫자 만 처리됨). 불행히도 배열의 표현식을 어느 시점에서 직접 작성해야합니다. – mkzh