当单个ListArrays中的任何一个具有重复元素时,计算ListArrays的数量

时间:2017-04-04 21:58:47

标签: java arraylist methods return

我需要一种检查许多不同ArrayLists的方法。对于每个单独的ListArray,我需要检查双重性(两个元素的任何实例相同),当满足条件时(即两个元素在ArrayList中相同),我需要计算条件满足的次数和检查完所有ListArrays后返回的int值。到目前为止,这是我的代码,以提供更好的主意。它不完整。我只需要返回类型为int的指导以及当单个ListArray中存在元素重复时如何增加计数

private static int findDuplicates(List<Integer> list) {

 int total=0;

 for (int j=0;j<list.size();j++)
   for (int k=j+1;k<list.size();k++)
     if (k!=j && list.get(k).equals(list.get(j)));
 total=+ total;

return total;
}

2 个答案:

答案 0 :(得分:1)

算法似乎也存在问题。如果一个元素在列表中出现三次,它将计算两次。如果它出现四次,它将被计算三次。

答案 1 :(得分:0)

语法和逻辑问题

1);条件末尾的if基本上阻止了if语句做任何事情,换句话说,它等同于具有空体的if语句。

2)您错误地递增了total变量。

3)确保包含{ }大括号。

4)你使用了错误的逻辑来增加total=+ total;,它应该是total += total;

您需要增加1;

total += 1;
//or if you prefer
total++;

不是0

total += total;

示例:

private static int findDuplicates(List<Integer> list) {

 int total=0;

 for (int j = 0; j < list.size(); j++){
     for (int k = j + 1; k < list.size(); k++){
        if (k != j && list.get(k).equals(list.get(j))){
            total++;
        }
     }
 }

 return total;
}

算法中的问题

此外,您的算法似乎有问题,因为让我们说如果一个元素在列表中出现几次/几次,它将不止一次计数。如果这是你的意图那么没问题。但是,如果情况并非如此,那么您可以尝试以下方法。

下面的方法基本上忽略了稍后在列表中遇到并已继续处理的所有重复项。

private static int findDuplicates(List<Integer> list) {

    int total=0;
    List<Integer> tempList = new ArrayList<>();

    for (int j = 0; j < list.size(); j++){
        for (int k = j + 1; k < list.size(); k++){
             if (k != j && list.get(k).equals(list.get(j)) && !tempList.contains(list.get(k))){
                 tempList.add(list.get(k));
                 total++;
             }
        }
    }

    return total;
}

扩展替代方法。

我们假设这是我们想要传递给findDuplicates方法的列表。

List<Integer> list = Arrays.asList(
        1,2,3,3,3,3,3,4,5,6,7,8,9,5,6,7,13,13,13,15,16
);

System.out.println(findDuplicates(list));

根据我提供的方法,它会打印5,但是,根据您的方法,它会打印16