需要在另一个数组中的数组中查找并存储重复的数字,但不知道如何将副本放在另一个数组中

问题描述 投票:0回答:3

我在数组“a”中找到了重复的数字,但是无法将重复的数字存储在另一个数组“b”中。任何帮助非常感谢!

这是我的代码:

public static void main(String[] args) {
    int[] a = {1,2,3,3,5,6,1,7,7};
    int[] b={};


    for (int i = 0; i < a.length; i++) {
        for (int j = i+1; j < a.length; j++) {
            if(a[i]==(a[j])){
                System.out.println(a[j]);

            }

        }
    }       
java arrays
3个回答
2
投票

因为结果的长度不知道,我想使用ArrayList而不是数组:

int[] a = {1, 2, 3, 3, 5, 6, 1, 7, 7};
List<Integer> b = new ArrayList<>();
for (int i = 0; i < a.length; i++) {
    for (int j = i + 1; j < a.length; j++) {
        if (a[i] == a[j] && !b.contains(a[j])) {
            b.add(a[j]);
            System.out.println(a[j]);
        }
    }
}
System.out.println(b);//result : [1, 3, 7]

1
投票

您也可以尝试使用集合框架在数组中查找重复项:

import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;

public class MyClass {
    public static void main(String args[]) {
        int[] a = {1,2,3,3,5,6,1,7,7};
        Set<Integer> set=new HashSet<Integer>();
        List<Integer> list=new ArrayList<Integer>();
        for(int i:a)    {
            if(!set.add(i))   {
                list.add(i);
            }
        }
        int[] b=new int[list.size()];
        for (int i=0;i<list.size();i++)    {
            b[i] =list.get(i);
        }

    }
}

这里我使用了set不允许重复的事实,如果set.add返回false,这意味着该元素已经在集合中可用


0
投票

初始化后,我们无法更改Array的大小。这里我们不知道Array中有多少重复项。

编辑 - 这可能是一个更好的解决方案,我早期的解决方案是抛出由@YCF_L指示的ArrayIndexOutOfBoundException -

import java.util.Arrays;

public class T {

    public static void main(String[] args) {

        //int[] a = {1, 2, 3, 3, 5, 6, 1, 7, 7}; //Set-1, provided by @YCF_L
        int[] a = {1,1,3,3,5,6,1,7,7}; //Set-2, provided by OP
        int[] b = {};

        for (int i=0, k=0; i < a.length; i++) {
            for (int j = i+1; j < a.length; j++) {
                if(a[i] == a[j]){
                    System.out.println(a[j]);
                    k = k+1;
                    int[] p  = new int[k];
                    for(int x=0; x < b.length; x++) {
                        p[x] = b[x];
                    }
                    p[k-1] = a[i];
                    b = p;
                }
            }
        }
        System.out.println(Arrays.toString(b));
        System.out.println(Arrays.toString(removeDuplicates(b)));
    }

    public static int[] removeDuplicates(int[] a) {
        boolean[] bArr = new boolean[1000];
        int j = 0;
        for (int i = 0; i < a.length; i++) {
            if (!bArr[a[i]]) {
                bArr[a[i]] = true;
                j++;
            }
        }
        int[] b = new int[j];
        int c = 0;
        for (int i = 0; i < bArr.length; i++) {
            if (bArr[i]) {
                b[c++] = i;
            }
        }
        return b;
    }
}

使用Set-1输出:

[1, 3, 7] [1, 3, 7]

使用Set-2输出:

[1, 1, 1, 3, 7] [1, 3, 7]

© www.soinside.com 2019 - 2024. All rights reserved.