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。