0

我正在尝试使用方法删除重复的数字并返回非重复的数字,实际上我现在被困在方法中。这是我的代码:

import javax.swing.JOptionPane;
public class duplicateRemover{
     public static void main(String[] args) {
    int[] array = new int[5];

    for (int i=0; i<array.length;i++) {
      String s=JOptionPane.showInputDialog(null,"PLEASE ENTER AN INTEGER:","INTEGERS",JOptionPane.QUESTION_MESSAGE);
      array[i] = Integer.parseInt(s);

    }
    removeDuplicates(array);
   for (int i=0; i<array.length;i++) {
    JOptionPane.showMessageDialog(null,array[i],"UNIQE INTEGERS",JOptionPane.PLAIN_MESSAGE);
   }
     }
public static int[] removeDuplicates(int a []) {
   int []removedDup=new int[a.length];

  for (int i = 0; i < a.length; i++) {
    for (int j = i-1; j < a.length; j++){
      if (a[i] == a[i]) {
        removedDup[i] = j;
        break;

  }

 }
4

4 回答 4

1

我是否理解正确,您想获取只出现一次的所有整数?这可以通过集合 API 轻松完成。

public static int[] removeDuplicates(int[] a) {
    Set<Integer> unique = new TreeSet<Integer>();
    List<Integer> results = new ArrayList<Integer>();
    for (int i = 0; i < a.length; i++) {
        if (!unique.add(a[i]))
            results.add(a[i]);
    }
    int[] ret = new int[results.size()];
    for (int i = 0; i < results.size(); i++)
        ret[i] = results.get(i);
    return ret;
}
于 2013-05-20T14:41:45.337 回答
0

显然,您正在尝试多循环元素并将其与其他元素进行比较,因此如果存在该元素的重复项,则将其删除并标记其索引。您编写的这段代码有问题,但是我现在看到您的主要问题是您将元素与它自己的元素进行比较,我认为if (a[i] == a[i])if (a[i] == a[j])的代码应该可以工作或抛出索引越界异常

于 2013-05-20T14:29:45.343 回答
0

扫描您的数组中的每个值并将其相互比较(您应该有一个嵌套的“for”),然后保留一个包含重复索引的列表,实例化一个大小为 a.length-listOfDuplicateIndexes.size().... ..用索引不是 int ListOfDuplicateIndexes 的 a[] 组件填充这个数组

于 2013-05-20T14:31:23.933 回答
0

这将做:

    public static int[] removeDuplicates(int a[]) {
    int n = a.length;
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n;) {
            if (a[j] == a[i]) {
                for (int k = j; k < n-1; k++)
                    a[k] = a[k + 1];
                n--;
            } else
                j++;
        }
    }

     int[] newArray = new int[n];
     System.arraycopy(a, 0, newArray, 0, n);

     return newArray;
}
于 2013-05-20T14:32:43.043 回答