我有一個座標系,如這樣的:如何結合並返回枚舉值
public enum Direction {
N (0, 1),
NE (1, 1),
E (1, 0),
SE (1, -1),
S (0, -1),
SW (-1, -1),
W (-1, 0),
NW (-1, 1);
private int x = 0, y = 0;
private Direction(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Direction combine(Direction direction) {
//unsure
}
}
我試圖用一種方法枚舉中組合的方向,如:
Direction.N.combine(Direction.E) -> should become Direction.NE
Direction.N.combine(Direction.N) -> null or Direction.N again
我想法是遍歷枚舉所有的值,並找到一個其x和y的組合匹配:
public Direction combine(Direction direction) {
Direction[] directions = Direction.values();
for (int i = 0; i < directions.length; i++)
if (x + direction.x == directions[i].x && y + direction.y == directions[i].y)
return directions[i];
return this;
}
但我覺得李這是解決這個問題的一種低效率的方式。有沒有另外一種方法來結合這些不涉及循環所有枚舉的方向?
我也想創建一個uncombine函數,它將反轉組合。
Direction.NE.uncombine() -> Direction[] {Direction.N, Direction.E}
我也可以用同樣的循環技術,如:
public Direction[] uncombine() {
Direction[] directions = Direction.values(),
rtn = new Direction[2];
for (int i = 0; i < directions.length; i++)
if (x == directions[i].x && directions[i].y == 0)
rtn[0] = directions[i];
for (int i = 0; i < directions.length; i++)
if (y == directions[i].y && directions[i].x == 0)
rtn[1] = directions[i];
return rtn;
}
所以是沒有辦法,我可以嘗試更有效的方法?
你能告訴你會有什麼樣的結果像Direction.NE.combine(Direction.W)Direction.N.combine(Direction.S)嗎? – ppawel
請注意,您的技術是不正確的:將N與SE組合使用E. –
如果嘗試將N與S組合,您希望返回值爲多少? – bhspencer