繁体   English   中英

给定两个随机整数数组,打印它们的交集。 也就是说,打印给定数组中存在的所有元素

[英]Given two random integer arrays, print their intersection. That is, print all the elements that are present in both the given arrays

import java.util.Arrays;

public class temp_2 {

    public static void intersection(int[] arr1, int[] arr2){

        Arrays.sort(arr1);
        Arrays.sort(arr2);
        int i=0;
        int j=0;

        while((i != arr1.length) || (j != arr2.length)){

            if(arr1[i]==arr2[j]){
                System.out.println(arr1[i]);
                i++;
                j++;

            }
            else{
                if(arr1[i]<arr2[j])
                    i++;
                else if(arr1[i]>arr2[j])
                    j++;
            }
        }
    }
    public static void main(String args[]){
int[] a={1,2,3,3};
int[] b={2,2,3,4,5};
        intersection(a,b);
    }

}

// 它打印正确的答案,但随后给出了 java.lang.ArrayIndexOutOfBoundsException 的错误。 我哪里出错了? 我首先对两个数组进行排序,然后使用此方法打印是否相等或增加索引,除非它的结尾是任何一个数组。

你应该改变你的陈述:

 (i != arr1.length) || (j != arr2.length)

到:

(i < arr1.length) && (j < arr2.length)

考虑使用 List 接口中的 retainAll 方法:

retainAll(Collection<?> c)

仅保留此列表中包含在指定集合中的元素(可选操作)。

公共类 CommonElementsInArray {

public static void main(String a[]){
    int[] arr1 = {1,2,3,4,5};
    int[] arr2 = {1,2,3,4,5,6,7,7,9};
    for(int i=0;i<arr1.length;i++){
        for(int j=0;j<arr2.length;j++){
            if(arr1[i]==arr2[j]){
                System.out.println(arr1[i]);
            }
        }
    }
}

}

输出:1,2,3,4,5

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM