2016-05-17 44 views
0

我编写了用于查找两个数组中发生的常见元素计数的代码,但是我的输出仅给出了我声明的数组大小。任何人都可以请指出我的代码中的错误?使用HashMap查找两个相等大小的数组中的相似元素的计数

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

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); 
    } 
} 
+0

发现分号错误,感觉自己很傻。非常感谢你:) –

相关问题