2016-05-17 24 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

發現分號錯誤,感覺自己很傻。非常感謝你:) –

相關問題