【发布时间】:2012-05-04 23:32:51
【问题描述】:
我希望在一堆 Point 数组中找到唯一点(即删除所有重复项并查看剩下的内容)。
这是我尝试过的代码:
int numCount = 0;
for (int x = 0; x < ALLARRAYS.length; x++) {
for (final Point test : ALLARRAYS[x]) {
NUMBER: for (final Point[] numbers : ALLARRAYS) {
if (numbers == ALLARRAYS[x]) {
continue;
}
for (int i = 0; i < numbers.length; i++) {
if (test.equals(numbers[i])) {
break NUMBER;
} else {
if (i == numbers.length - 1) {
numCount++;
}
}
}
}
if (numCount == 10) {
System.out.println(x + "\tPoint: " + test.x + ", " + test.y + " is unique.");
}
numCount = 0;
}
System.out.println();
}
基本上,我要检查 11 个数组,因此 numCount 会检查 10 个要确认的数组。我的方法是循环遍历每个数组,然后循环遍历该数组中的所有点,然后循环遍历每个其他数组中的每个点。如果它看到重复,它会完全跳过整个数字。
我的问题:我得到了错误的读数。我不确定发生了什么,但程序会吐出其他数组中已经存在的点。
我的目标:每个数组作为一个整体工作。如果一个元素不满足,则跳过整个数组。我的最终结果应该是 11 个较小的数组,它们都是唯一的,以便方法可以检查每个集合的元素并确定它们都是唯一的。
注意:这些数组现在都是独一无二的,它们非常大。我正在寻找一种方法来通过创建这个小程序来消除重复项来截断它。
我的问题:有人可以帮我吗?
【问题讨论】:
-
您的问题是什么?这段代码是否按您的预期工作,还是有什么问题?
-
您能否提供一些示例输入、实际输出和预期输出,以便我们帮助找出发生这种情况的原因?
-
test == numbers[i]。 Point 是一个类,如果test和numbers[i]具有相同的引用,则使用==运算符比较它只会返回 true。尝试改用test.equals(numbers[i])? -
您还需要考虑将
Point与自身进行比较的情况。 -
如果您的数组“大得离谱”,请考虑对它们进行排序。然后,一旦遇到在您正在测试的点之后出现的点,您就可以跳到下一个数组。