我编写了代码来查找两个数组中出现的公共元素的数量,但是我的输出只给出了我声明的数组的大小。任何人都可以在我的代码中指出错误吗?
import java.io.*;
import java.util.*;
public class arreq1 {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
HashMap<Integer, Integer> hm = new HashMap<Integer, Integer>();
//int t = in.nextInt();
int n = in.nextInt();
int p[] =new int[n];
int c[] =new int[n];
int count=0;
for(int i=0;i<n;i++)
p[i] = in.nextInt();
for(int k=0;k<n;k++){
c[k] = in.nextInt();
}
for(int j=0;j<p.length;j++){
hm.put(p[j],j);
if(hm.containsKey(c[j]));
count++;
}
System.out.println(count);
}
}
答案 0 :(得分:0)
if(hm...)
行末尾有一个额外的分号。否则,if语句只控制空语句;
的执行,而不控制下一行的count++;
。
此外,您必须将最后一个for循环拆分为两个单独的循环,否则它将找到部分公共元素。例如,当j = 0时,只有c[0] == p[0]
而不是c[0] == any p[0 .. n-1]
才会增加计数。
其他一些改进:您可以使用HashSet而不是HashMap。您还可以使用其他Java集合实用程序为您完成艰苦的工作,例如(未经测试):
import java.io.*;
import java.util.*;
public class arreq1 {
public static void main(String args[]){
Scanner in = new Scanner(System.in);
Set<Integer> ps = new HashSet<Integer>();
List<Integer> cl = new ArrayList<Integer>();
//int t = in.nextInt();
int n = in.nextInt();
int p[] =new int[n];
int c[] =new int[n];
int count=0;
for(int i=0;i<n;i++)
p[i] = in.nextInt();
for(int k=0;k<n;k++){
c[k] = in.nextInt();
}
for(int j=0;j<p.length;j++){
ps.add(p[j]);
cl.add(c[j]);
}
// remove entries in cl that do not exist in ps
cl.retainAll(ps);
count = cl.size();
System.out.println(count);
}
}