2014-10-26 136 views
2

嘿,我一直在搞乱java并创建这个程序,它会经过一个数组并找到数组中的所有重复项,它的工作非常棒!但有一个小问题,如果我运行该程序,并有一个价值超过2个副本将输出发现相同值的两个副本 - 这可能解释它更好在数组中查找重复项

输出

Duplicates in Array: 1 
Duplicates in Array: 8 
Duplicates in Array: 8 

我一直停留在这一段时间,现在我知道它可能是一些小错误,但如果有人可以帮助我走出这将是真棒,代码如下,感谢

import java.util.Arrays; 
public class Duplicates { 
    public static void main (String[] args) { 
     int[] values = { 8, 5, 9, 8, 6, 13, 33, 1, 98, 12, 8, 1 }; 
     Arrays.sort(values); 
     for(int i = 1; i < values.length; i++) { 
      if(values[i] == values[i - 1]) { 
       System.out.println("Duplicates in Array: " + values[i]); 
      } 
     } 
    } 
} 
+3

你应该用一个HashSet ,只允许独特的元素,并会自动忽略重复的值。 – Afforess 2014-10-26 21:54:19

+0

http://stackoverflow.com/questions/7414667/identify-duplicates-in-a-list似乎是一个非常类似的问题 – eee 2014-10-26 21:59:47

+0

好吧,如果你需要找出每个值有多少重复,那么你可以很容易地创建一个Map ,然后迭代数组,并将您的数组值作为映射键,并在该条目已存在时增加映射值(对于键)。 – 2014-10-26 22:00:26

回答

2

如果我明白你的问题,那么您可以添加一个while循环,在报告之后通过重复进展。像,

public static void main(String[] args) { 
    int[] values = { 8, 5, 9, 8, 6, 13, 33, 1, 98, 12, 8, 1 }; 
    Arrays.sort(values); 
    for (int i = 1; i < values.length; i++) { 
     if (values[i] == values[i - 1]) { 
      System.out.println("Duplicates in Array: " + values[i]); 
      while (values[i] == values[i - 1]) { // <-- add this 
       i++; 
      } 
     } 
    } 
} 

输出是

Duplicates in Array: 1 
Duplicates in Array: 8 
+0

啊我现在看到,我实际上正在尝试使用while循环来处理它,我只是使它过于复杂:p谢谢! – Aaron 2014-10-26 22:24:41

+0

@Aaron:这是一个更可重复使用的版本:http://pastebin.com/eWYgf8kS – 2014-10-26 22:59:03

0

我不知道,如果你被允许使用的ArrayList或者不是在你的例子,但如果你是,那么你可以轻松存储你已经拥有的价值观和在每个for循环你可以检查是否有任何重复。

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

     for (int j = i + 1; j < values.length; j++) { 
      if (values[i] == values[j] && !foundValues.contains(values[j])) { 
       System.out.println("Duplicates in Array: " + values[i]); 
       foundValues.add(values[i]); 
      } 
     } 
    } 

输出

Duplicates in Array: 1 
Duplicates in Array: 8 
+0

感谢您帮助我:)我之前并没有与arraylist合作过,我打算继续开始寻找现在感谢他们! – Aaron 2014-10-26 22:24:09