-3

这段代码的问题是它会打印出 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

4 回答 4

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);
}
于 2013-03-06T02:47:46.757 回答
0

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

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

如果值没有改变,并且duplicateFound为假,则设置duplicateFound为真并打印。

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

于 2013-03-06T02:42:23.570 回答
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
于 2013-03-06T02:45:31.013 回答
-1

我不清楚这个问题。如果您需要根据输入数组的大小消除重复项,一种简单的方法是构造 ajava.util.Set并遍历它。

于 2013-03-06T02:43:27.237 回答