在数组中查找重复的数字

时间:2013-03-06 02:39:36

标签: java arrays duplicate-data

此代码的问题在于它将打印出5 9 9,而不是仅仅5,9。因为阵列中有第三个9。我错过了什么?

编辑:我需要编写一个函数来获取给定数组的重复项。我试图这样做,但它打印出5,9,9而不是5,9。

编辑2:我在读完HashSet后想出来并使用下面的代码让它工作。我希望这可以帮助其他人解决同样的问题。

import java.util.HashSet;


public class Duplicator {

/**
 * @param args
 */
public static void main(String[] args) {

    int[] a = {3,5,5,8,9,9,9};

    HashSet<Integer> hash = new HashSet<Integer>();

    for(int i = 0; i < a.length; i++){

        for(int j = i+1; j< a.length; j++){

            if(a[i] == a[j]){

                hash.add(a[i]);

            }
        }


    }

    System.out.println(hash);

    }
}

4 个答案:

答案 0 :(得分:2)

您正在尝试查找重复的数字,但实际上您只是与前一个元素进行比较。因此,每次打印数字与前一个数字相同,这意味着:5,9和9

您可以添加变量以跟踪最后打印的元素。但是,如果数组没有排序,代码仍然会中断。

您还可以使用集:

public static void main(String[] args) {
  int[] a = {3,5,5,8,9,9,9};

  Set<Integer> encounteredNumbers = new HashSet<Integer>();
  Set<Integer> duplicateNumbers = new LinkedHashSet<Integer>(); // LinkedHashSet to keep in same order as encountered.
  for (int i : a) {
    if (encounteredNumbers.contains(i)) {
      duplicateNumbers.add(i);
    }
    encounteredNumbers.add(i);
  }

  System.out.println(duplicateNumbers);
}

答案 1 :(得分:0)

尝试前进数组,同时跟踪最后一个元素的值。

如果值已更改,请将布尔值duplicateFound设置为false。

如果值未更改且duplicateFound为false,请将duplicateFound设置为true并打印。

如果数组可能未排序,请务必先对数组进行排序。

答案 2 :(得分:0)

您可以使用一组来避免重复值。例如:

Set<Integer> values=new HashSet<Integer>();
values.add(5);
values.add(9);
values.add(9);
for(Integer val: values) {
System.out.println(val);
}

打印:

5
9

另一个例子:

int[] a = {3,5,5,8,9,9,9};
List<Integer> list=new ArrayList<Integer>();
for(int i=0; i<a.length; i++) {
if(!list.contains(a[i])) {
list.add(a[i]);
}

}

for(int index=0; index<list.size(); index++) {
System.out.println(list.get(index));// prints the value in the corresponding index.
}

打印如下:

3
5
8
9

答案 3 :(得分:-1)

我不清楚这个问题。如果你需要消除重复,根据输入数组的大小,一个简单的方法就是构造一个java.util.Set并迭代它。