2014-11-08 49 views
-1

我有一個哈希映射和一個ArrayList。他們都填充,因爲我試圖打印出來,它工作正常。 arrayList包含MeterNumbers(MeterNumber是HashMap的關鍵)。該地圖包含用於鍵的MeterNumbers和用於值的字符串。HashMap始終返回空值,沒有明顯的原因

我希望能夠做的是從給定的MeterNumber鍵的hasMap中獲取String值,我將從ArrayList中提供該值。我不認爲我需要檢查它是否存在,因爲我知道它確實如此。我盡我所能來獲取值,但它一直給我空值。這是我的代碼。對於meters.txt

import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Map; 
import java.util.Scanner; 


public class Try { 
    static Map <MeterNumber, String> map2 = new HashMap <MeterNumber, String>(); 
    static ArrayList<MeterNumber> blackOutMeters = new ArrayList<MeterNumber>(); 

    public static void main (String args[]) { 

     try { 
      Scanner sc2 = new Scanner(new java.io.File("meters.txt")); 
      Scanner sc3 = new Scanner(new java.io.File("outages.txt")); 
      while (sc2.hasNextLine()) { 
       String transformerId; 
       MeterNumber meterId;     
       String line = sc2.nextLine(); 
       String[] array = line.split(" ");    
       if (array.length>3){ 
        transformerId = array[3]; 
        meterId = MeterNumber.fromString(array [0] + array [1] + array [2]); 
        map2.put(meterId, transformerId);     
       } 
      } 
    //  System.out.println (map2.values()); 
      while (sc3.hasNextLine()) { 
       MeterNumber meterId;     
       String line = sc3.nextLine(); 
       String[] array = line.split(" ");    
       if (array.length>2){     
        meterId = MeterNumber.fromString(array [0] + array [1] + array [2]);   
        blackOutMeters.add(meterId);              
       }    
      } 

     for (int i = 0; i <blackOutMeters.size(); i++){ 

      String s = map2.get(blackOutMeters.get(i)); 
      System.out.println (s); 

     } 


} 
     catch (FileNotFoundException e) { 

      e.printStackTrace(); 
     } 
    }} 

文件格式是:對於outages.txt

900 791 330 T1 
379 165 846 T1 
791 995 073 T1 
342 138 557 T1 
114 125 972 T1 
970 324 636 T1 
133 997 798 T1 
308 684 630 T1 
169 329 493 T1 
540 085 209 T1 
265 229 117 T1 
970 173 664 T1 
264 943 573 T1 
462 043 136 T1 
087 307 071 T1 
001 343 243 T1 

文件格式爲:

900 791 330 
379 165 846 
791 995 073 
342 138 557 
114 125 972 
970 324 636 
133 997 798 

預先感謝您。

+0

哪裏了'MeterNumber'代碼的方法是什麼? – 2014-11-08 02:49:33

+0

原因是:1)沒有找到給定鍵的項目,通常表明一個錯誤的equals/hashCode或者2)null被指定爲一個值。用「無理由」來解決計算機問題是沒有生產力的。 – user2864740 2014-11-08 02:49:34

+0

(如果它與equals/hashCode有關,則有大量重複項。) – user2864740 2014-11-08 02:50:41

回答

4

您需要實現hashCodeequalsMeterNumber

否則Java沒有知道如何比較你的對象

+0

嗨, 謝謝。我不知道如何去做你說的話。可以多解釋一下。感謝 – lolian 2014-11-08 03:04:41

+0

['hashCode'](http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode())和['equals'](http:// docs .oracle.com/javase/7/docs/api/java/lang/Object.html#equals(java.lang.Object))是在['Object'](http://docs.oracle.org/)中定義的方法。 COM/JavaSE的/ 7 /文檔/ API /爪哇/郎/ Object.html)。您需要重寫類'MeterNumber'中的那些方法,因爲這些方法用於比較對象。 – mkobit 2014-11-08 03:12:02

+0

@MikeKobit太棒了!感謝你們。我只是做了一些研究。謝謝 – lolian 2014-11-08 03:22:17