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


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)

考虑从列表接口使用 retainAll 方法:

retainAll(Collection<?> c)

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

public class 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

希望这有帮助!

最新更新