2014-11-08 44 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