Ich habe diese Funktion unten findNeighboringChains (i, j) genannt. Sie übergeben einen Punkt (x, y) und geben alle Kettenobjekte zurück, die in den benachbarten Punkten (x + 1, y), (x - 1, y), (x, y + 1) und (x, y - 1). Wenn keine Kette bei (x, y) existiert, dann findChainId (x, y) = -1, andernfalls wird eine ID> = 0 zurückgegeben. Nur eine Kette kann an jedem (x, y) existieren. Für mehr Kontext ist dies eine Funktion, die ich verwende, um benachbarte Ketten zu einer Zelle im Spiel Go zu finden.Wie man über Ordinalrichtungen über einen Punkt (x, y) iteriert?
Ich fühle mich wie das, was ich bis jetzt habe, ist etwas wortreich, aber ich bin nicht sicher, wie man es besser macht. Es scheint, als wäre es ideal, wenn ich über diese Punkte (x + 1, y) ... (x, y - 1) durch eine Schleife iterieren könnte. Irgendwelche Vorschläge?
public ArrayList<Integer> findNeighboringChains(int i, int j) {
ArrayList<Integer> neighboringChains = new ArrayList<>();
int tmp = findChainId(i - 1, j);
if (tmp != -1) {
neighboringChains.add(tmp);
}
tmp = findChainId(i + 1, j);
if (tmp != -1) {
neighboringChains.add(tmp);
}
tmp = findChainId(i, j - 1);
if (tmp != -1) {
neighboringChains.add(tmp);
}
tmp = findChainId(i, j + 1);
if (tmp != -1) {
neighboringChains.add(tmp);
}
return neighboringChains;
}
siehe http://stackoverflow.com/questions/1240643/a-question-of-design-and-object-verantwortung und http://stackoverflow.com/a/1240759/82118 –
Vielen Dank für Ihren Kommentar, seine Richtung Enum ist sehr nützlich – CowZow