我必须创建一个方法,该方法返回一个包含来自两个不同数组的公共元素的数组。我知道对此有很多疑问,但是我的与我创建一个新数组时有些不同。
我试图首先计算两个数组中有多少个普通元素,然后创建一个大小为该数量的数组。
之后,我尝试使用for循环将新数组设置为公共元素。
public static int [] commonElements(int []a, int [] b){
int count=0;
for(int i=0;i<a.length;i++) {
for(int j=0;j<b.length;j++) {
if(a[i] == b[j]) {
count++;
}
}
}
int []array= new int[count];
for(int i=0;i<a.length;i++) {
for(int j=0;j<b.length;j++) {
if(a[i] == b[j]) {
for (int k=0; k<count; k++){
array[k]=a[i];
}
}
}
}
return array;
}
这将返回四个-1,因此不起作用。 我还被要求不要使用arraylist,所以我不知道如何使此代码完整。 预期值
// checking common elements
System.out.println ("\nLooking for common elements in the arrays ");
int [] arr3= {56, -21, -5, 7, 10, 21, 2, -1};
int [] arr4= {-1, -56, 5, 21, 3 , 7, 4, -6, 2, 90};
int [] result4 = commonElements(arr3, arr4);
System.out.println (Arrays.toString(arr3));
System.out.println (Arrays.toString(arr4));
System.out.print ("\nCommon elements array: ");
System.out.println (Arrays.toString(result4));
主要是
Looking for common elements in the arrays
[56, -21, -5, 7, 10, 21, 2, -1]
[-1, -56, 5, 21, 3, 7, 4, -6, 2, 90]
Common elements array: [7, 21, 2, -1]
任何帮助将不胜感激!
答案 0 :(得分:1)
您可能想使用列表存储中间的相交值,然后在方法末尾转换为数组:
public static int[] commonElements(int[] a, int[] b) {
List<Integer> common = new ArrayList<>();
for (int i=0; i < a.length; i++) {
for(int j=0; j < b.length; j++) {
if (a[i] == b[j]) {
common.add(a[i]);
}
}
}
int[] array = common.stream().mapToInt(Integer::intValue).toArray();
return array;
}
如果您不想记录重复,则将common
替换为Set<Integer>
。
答案 1 :(得分:0)
首先,您需要int []array= new array[count];
而不是new int[count];
-第二,而不是第三个内部循环,在填充输出时,请保留位置索引,并在遇到重复项时增加位置索引。喜欢,
public static int[] commonElements(int[] a, int[] b) {
int count = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
if (a[i] == b[j]) {
count++;
}
}
}
int[] array = new int[count];
int p = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
if (a[i] == b[j]) {
array[p] = a[i];
p++;
}
}
}
return array;
}
或者,如果使用Java 8+,则可以通过对两个数组的IntStream
进行过滤来简化上述操作。喜欢,
return Arrays.stream(a).filter(i -> Arrays.stream(b).anyMatch(x -> x == i))
.toArray();