簡體   English   中英

使用HashMap查找兩個相等大小的數組中相似元素的數量

[英]Find the count of similar elements in two equal-sized arrays using 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);
    }
}

if(hm...)行的末尾有一個多余的分號。 否則,if語句僅控制空語句的執行; 而不是count++; 在下一行。

另外,您必須將last 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);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM