此代码的问题在于它将打印出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);
}
}
答案 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
并迭代它。