我想找到两个不同大小的数组之间的公共元素,并将它们放在另一个数组中。 你能说出我的代码有什么问题吗?
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;
答案 0 :(得分:0)
它不起作用的原因确实是由于nrEqualler
的内存分配不正确,正如评论中所述。
但是,我的代码中有一些变化:
使用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;
}
答案 1 :(得分:0)
问题出在这些代码行之间
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;
}
使用集合将确保您不会在结果数组中获得任何重复项。如果副本很好,那么您可以使用ArrayList存储公共元素,然后将它们转换为Array。