有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有下面的方法,它采用字符串的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;
    }

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


共 (1) 个答案

  1. # 1 楼答案

    这是因为你循环了2次,所以每个条目都会告诉你我重复了2次

    假设你在2号、5号和10号有相同的坐标/房子。现在根据现有的逻辑,当你的第一个循环为i=2运行时,它将为510给出是,你的duplicateCount将为2,这是正确的。但是当你的第一个循环运行i=5时,它会再次给出10的是。这就是问题所在

    所以,你可以做的是只为你的第一个for循环增加duplicateCount一次,这样即使还有100个条目,它也不会增加duplicateCount,只会在连续运行第一个for循环时增加,这将防止重复增加duplicateCount

    请尝试以下内容:

    public static int duplicateHouses(ArrayList<String> houses){
        int duplicateCount = 0;
        ArrayList<String> dupHouses = new ArrayList<String>;
    
        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))){
                    if(!dupHouses.contains(houses.get(j))){
                        duplicateCount++;
                        dupHouses.add(houses.get(j));
                    }
                }
            }
            dupHouses = new ArrayList<String>; //Reset for next iteration ...
        }
        return duplicateCount;
    }