如何通过返回数组来打印数组中的唯一元素?

时间:2015-01-23 20:18:45

标签: java arrays

我有以下代码片段,并希望打印数组a []
的唯一元素 我想通过返回一个数组在main方法中打印结果。 以下代码返回结果 - 10 20 21 34 0 56 65 0 76 67 45 55 0 99 23 0 0 0 12
任何人都可以告诉我我在做错的地方吗?

public class uniqueElements {
static int[] newArr=null;
public static void main(String[] args){
 int[] a=new int[] {10,20,21,34,21,56,65,65,76,67,45,55,10,99,23,67,99,34,12};
 int[] b=uniqueElements(a);
 for(int i:b){
     System.out.print(i+" ");
 }

 }

private static int[] uniqueElements(int[] arr) {
newArr=new int[arr.length];
for(int i=0;i<arr.length;i++){
    boolean isDistinct = false;
    for(int j=0;j<i;j++){
        if(arr[i] == arr[j]){
            isDistinct = true;
            break;
        }
    }
    if(!isDistinct){

        newArr[i]=arr[i];

    }
}
return newArr;
}
}

3 个答案:

答案 0 :(得分:2)

如果您只想要唯一值,也可以使用Set:

http://docs.oracle.com/javase/7/docs/api/java/util/Set.html

Set<Integer> b = new HashSet<Integer>(Arrays.asList(a));

但如果您仍想手动完成,您可以像其他人所说的那样做。

答案 1 :(得分:1)

将输入数组中的不同值复制到输出数组中的相同索引,这意味着重复值的索引将保持为0,这是您在输出中看到的。

可能的解决方案:

private static int[] uniqueElements(int[] arr) 
{
    newArr=new int[arr.length];
    int count = 0;
    for(int i=0;i<arr.length;i++){
        boolean isDistinct = false;
        for(int j=0;j<i;j++){
            if(arr[i] == arr[j]){
                isDistinct = true;
                break;
            }
        }
        if(!isDistinct) {
            newArr[count]=arr[i];
            count++;
        }
    }
    return newArr;
}

这将返回一个数组,其第一个count元素是输入数组的唯一值。最后它仍然会有一些0。要消除这些0,您可以创建一个新的count元素数组,并将count的{​​{1}}元素复制到其中。

顺便说一下,你的newArr标志与其名称含义完全相反。当您找到重复项时,将其设置为true。

答案 2 :(得分:1)

删除重复元素的最简单方法是将内容添加到Set(不允许重复),然后将Set添加回ArrayList

public class uniqueElements {
static int[] newArr=null;
public static void main(String[] args){
 int[] a=new int[] {10,20,21,34,21,56,65,65,76,67,45,55,10,99,23,67,99,34,12};
 int[] b=uniqueElements(a);
 for(int i:b){
     System.out.print(i+" ");
 }

 }

private static int[] uniqueElements(int[] a) {

// add elements to a, including duplicates
HashSet hs = new HashSet();
hs.addAll(a);
a.clear();
a.addAll(hs);
return a;
}
}