检查不同 ArrayLists 的元素是否共享位置
Check if elements of different ArrayLists share position
我正在编写一个在 Java 中穿过二维板的探针。为此,我有两个整数 ArrayList,其中包含探测器所遵循的路径。第一个 ArrayList 包含 x 坐标,第二个包含 y 坐标。我想做的是检查移动的下一个图块是否已被访问,即新的 x 坐标和新的 y 坐标是否在相应的 ArrayList 中并共享相同的 position.That方式,如果新的瓷砖已经被访问过,我就不会移动到那里。我怎么可能这样做?我已经尝试使用 indexOf 和 lastIndexOf,但它不起作用,因为每个坐标都可以重复无限次。我也试过 .contains 但它也没有用,因为我需要它包含在两个数组的特定位置。
如有任何帮助,我们将不胜感激。
首先Java是面向对象的,所以你应该使用对象。为什么要将坐标存储在两个单独的数组中?
您可以定义自己的类型:
class Position implements Comparable<Position> {
public final int x;
public final int y;
Position(int x, int y) { this.x = x; this.y; }
@Override public int compareTo(Position other) { ... }
@Override public boolean equals(Object other) { ... }
@Override public int hashCode() { ... }
}
然后用这个你可以为所欲为,例如
Set<Position> visited = new HashSet<Position>();
Map<Position, Integer> visitedWithSpecificPositionInPath = new HashMap<Position, Integer();
等等。
一个非常混乱的方法是找到匹配 x 坐标的所有索引,并为找到的每个索引检查给定索引的 y 坐标是否等于所讨论的 y
。
所以给定坐标 x
、y
和数组列表 visitedX
和 visitedY
你可以这样做:
public static boolean isVisited(int x, int y){
for(int i = 0; i < visitedX.size(), i++){
if(visitedX.get(i) == x){
if(visitedY.get(i) == y){
return true;
}
}
}
return false;
}
但是正如 Jack 所提到的,您应该重新考虑您的数据结构,因为遍历完整的 x 坐标列表并不是很有效(尽管您可以使用 [=17= 减少外部 for
循环的限制] 和 visitedX.lastIndexOf(x)
).
我正在编写一个在 Java 中穿过二维板的探针。为此,我有两个整数 ArrayList,其中包含探测器所遵循的路径。第一个 ArrayList 包含 x 坐标,第二个包含 y 坐标。我想做的是检查移动的下一个图块是否已被访问,即新的 x 坐标和新的 y 坐标是否在相应的 ArrayList 中并共享相同的 position.That方式,如果新的瓷砖已经被访问过,我就不会移动到那里。我怎么可能这样做?我已经尝试使用 indexOf 和 lastIndexOf,但它不起作用,因为每个坐标都可以重复无限次。我也试过 .contains 但它也没有用,因为我需要它包含在两个数组的特定位置。
如有任何帮助,我们将不胜感激。
首先Java是面向对象的,所以你应该使用对象。为什么要将坐标存储在两个单独的数组中?
您可以定义自己的类型:
class Position implements Comparable<Position> {
public final int x;
public final int y;
Position(int x, int y) { this.x = x; this.y; }
@Override public int compareTo(Position other) { ... }
@Override public boolean equals(Object other) { ... }
@Override public int hashCode() { ... }
}
然后用这个你可以为所欲为,例如
Set<Position> visited = new HashSet<Position>();
Map<Position, Integer> visitedWithSpecificPositionInPath = new HashMap<Position, Integer();
等等。
一个非常混乱的方法是找到匹配 x 坐标的所有索引,并为找到的每个索引检查给定索引的 y 坐标是否等于所讨论的 y
。
所以给定坐标 x
、y
和数组列表 visitedX
和 visitedY
你可以这样做:
public static boolean isVisited(int x, int y){
for(int i = 0; i < visitedX.size(), i++){
if(visitedX.get(i) == x){
if(visitedY.get(i) == y){
return true;
}
}
}
return false;
}
但是正如 Jack 所提到的,您应该重新考虑您的数据结构,因为遍历完整的 x 坐标列表并不是很有效(尽管您可以使用 [=17= 减少外部 for
循环的限制] 和 visitedX.lastIndexOf(x)
).