gpt4 book ai didi

java - 用于计算 ArrayList 中重复项的嵌套循环无法正常工作

转载 作者:行者123 更新时间:2023-12-02 04:07:58 24 4
gpt4 key购买 nike

我有以下方法,它接受字符串的 ArrayList,其中每个字符串都是“(x, y)”形式的坐标。该方法应该计算这些坐标在列表中出现多次的次数。

这是我的代码:

public static int duplicateHouses(ArrayList<String> houses){
int duplicateCount = 0;

for(int i = 0; i < houses.size(); i++){
for(int j = i + 1; j < houses.size(); j++){
if((houses.get(i)).equals(houses.get(j))){
duplicateCount++;
}
}
}

return duplicateCount;
}

它最终返回的数字远远大于我列表中的字符串数量。我哪里出错了?

最佳答案

如果 List 中至少有 4 个重复项,第一个循环将找到 3 个,第二个循环将找到 2 个,第三个循环将找到 1 个,结果为 6。基本上,每个循环都会再次查找相同的重复项。

例如...

public static void main(String[] args) {
ArrayList<String> houses = new ArrayList<>(25);
houses.add("(1x1)");
houses.add("(1x2)");
houses.add("(1x1)");
houses.add("(1x3)");
houses.add("(1x1)");
houses.add("(1x4)");
houses.add("(1x1)");
houses.add("(1x5)");

System.out.println(houses.size());
System.out.println(duplicateHouses2(houses));
}

public static int duplicateHouses(ArrayList<String> houses) {
int duplicateCount = 0;

for (int i = 0; i < houses.size(); i++) {
System.out.println("---");
for (int j = i + 1; j < houses.size(); j++) {
if ((houses.get(i)).equals(houses.get(j))) {
System.out.println(i + ": " + houses.get(i) + " == " + j + ": " + houses.get(j));
duplicateCount++;
}
}
}

return duplicateCount;
}

哪个输出...

---
0: (1x1) == 2: (1x1)
0: (1x1) == 4: (1x1)
0: (1x1) == 6: (1x1)
---
---
2: (1x1) == 4: (1x1)
2: (1x1) == 6: (1x1)
---
---
4: (1x1) == 6: (1x1)
---
---
---

现在,您可以创建 List 的副本,并在找到每个重复项时将其删除,或者您可以使用第二个 List 来存储重复值。

我尝试计算值的 Set 与原始 List 之间的差异,但这返回的值比预期结果小 1(在上面的示例中)它返回 3 而不是 4)

相反,我使用原始的 Stream#filterSet 来生成重复计数

例如...

public static int duplicateHouses(ArrayList<String> houses) {
// Make sure we only have 1 of each possible value
Set<String> copy = new HashSet<>(houses);
int duplicateCount = 0;
// For each value, we want to filter the original
// list so that only matching values remain...
for (String value : copy) {
Stream<String> filter = houses.stream().filter((String t) -> t.equals(value));
// If there is more then one, then there are duplicates...
long count = filter.count();
if (count > 1) {
duplicateCount += count;
}
}
return duplicateCount;
}

根据第一个示例,返回 3

关于java - 用于计算 ArrayList 中重复项的嵌套循环无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34077928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com