Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找两个数组之间的公共元素_Java_Arrays - Fatal编程技术网

Java 查找两个数组之间的公共元素

Java 查找两个数组之间的公共元素,java,arrays,Java,Arrays,我想找到两个大小不同的数组之间的公共元素,然后将它们放在另一个数组中。 你能告诉我我的密码有什么问题吗 public static int[] numratEQelluar(int[] vargu, int[]varguPer) { int count = 0; int [] nrQelluar = new int[count]; for(int i = 0; i<vargu.length; i++) { for(int idx =

我想找到两个大小不同的数组之间的公共元素,然后将它们放在另一个数组中。 你能告诉我我的密码有什么问题吗

    public static int[] numratEQelluar(int[] vargu, int[]varguPer)
{
    int count = 0;
    int [] nrQelluar = new int[count];
    for(int i = 0; i<vargu.length; i++)
    {
        for(int idx = 1;idx<varguPer.length ; idx++)
        {
            if(vargu[i] == (varguPer[idx]))
            {
                count++;
                for(int index = 0; index<nrQelluar.length; index++)
                {
                    nrQelluar[index] = vargu[i];    
                }

            }
        }

    }
    return nrQelluar;
公共静态int[]numratEQelluar(int[]vargu,int[]varguPer)
{
整数计数=0;
int[]nrQelluar=新的int[count];

对于(int i=0;i来说,它不工作的原因确实是由于注释中提到的对
nRequaler
的内存分配不正确

但是,我想在您的代码中更改一些内容:

  • 使用
    LinkedList
    而不是原语
    int[]
    进行动态调整 数组的效率更高(外接程序
    O(1)

  • 通过提取方法减少缩进和混淆索引

  • 因此,这应该做到:

    public static int[] numratEQelluar(int[] vargu, int[]varguPer){
        List<Integer> nrQelluar = new LinkedList<Integer> ();
        for(int i = 0; i < vargu.length; i++) {
            if (contains(varguPer, vargu[i])) nrQelluar.add(vargu[i]);
        }
        return toPrimitive(nrQelluar);
    }
    
    private static boolean contains(int [] array, int num){
        for(int i = 0; i < array.length; i++){
            if(array[i] == num) return true;
        }
        return false;
    }
    
    private static int[] toPrimitive(List<Integer> list) {
        int[] primitiveArray = new int[list.size()];
        for(int i = 0; i < list.size(); i++){
            primitiveArray[i] = list.get(i);
        }
        return primitiveArray;
    }
    
    公共静态int[]numratEQelluar(int[]vargu,int[]varguPer){
    List nrQelluar=newlinkedlist();
    for(int i=0;i
    问题出在这两行代码之间

    int count = 0;
     int [] nrQelluar = new int[count];
    
    新数组的大小将为零。请尝试将其更改为两个数组的长度之和

    使用工作代码更新。

    请尝试以下代码:

    public static Integer[] findCommonElements(int[] arr1, int[] arr2){
        HashSet set = new HashSet<>();
        for(int i=0;i<arr1.length;i++){
          for(int j=0;j<arr2.length;j++){
            if(arr1[i] == arr2[j]){
              set.add(arr1[i]);
            }
          }
        }
        Integer[] resultArray = (Integer[]) set.toArray(new Integer[set.size()]);
        return resultArray;
      }
    
    公共静态整数[]findCommonElements(int[]arr1,int[]arr2){
    HashSet=newhashset();
    
    对于(int i=0;i首先编辑问题的标记,以包括您编写的代码所使用的语言,因为代码可能在多个位置都有效,目前它太宽泛了languages@Ferrybig,对不起,我忘了。代码是用Java编写的。你从不更新nrQelluar的长度。你从大小0开始,到大小0结束。也许你应该开始用较短数组的长度计算。@matt是正确的。您的
    nrQelluar
    总是长度为零。您应该先将数组设置为相同的大小,然后在知道它应该有多少个元素后再缩短长度。您还可以查看以下内容:我想将数组的长度精确设置为多少个数字r是相同的。例如,如果是4个常用数字,我希望数组长度为4。