2014-11-08 2 views
-1

해시 맵과 ArrayList가 있습니다. 그들 모두를 인쇄하려고 시도 했으므로 둘 다 채워져 정상적으로 작동합니다. arrayList는 MeterNumbers를 포함합니다 (MeterNumber는 HashMap의 키입니다). 지도에는 키의 경우 MeterNumbers가, 값의 경우 String이 포함됩니다.HashMap은 명백한 이유없이 null 값을 계속 반환합니다.

내가 할 수있게하려면, ArrayList에서 제공 할 MeterNumber 키가있는 hasMap에서 String 값을 가져온다. 나는 그것이 존재 하는지를 확인할 필요가 있다고 생각하지 않는다. 나는 그것이 확실하다는 것을 안다. 나는 값을 얻기 위해 할 수있는 모든 노력을 기울 였지만, 계속 null 값을주고있다. 여기 내 코드가있다. 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

에 대한 hashCodeequals를 구현해야? –

+0

그 이유는, 1) 지정된 키에 대응하는 항목이 발견되지 않았던 것이 원인으로, 일반적으로 나쁜 등가/해시 코드 또는 2) null가 값으로서 할당되고있는 것을 나타냅니다. "No Reason"으로 컴퓨터 문제에 접근하는 것은 생산적이지 않습니다. – user2864740

+0

(그리고 equals/hashCode와 관련이 있다면 많은 중복이 있습니다.) – user2864740

답변

4

당신은 그렇지 않으면 자바가 객체

`MeterNumber`에 대한 코드의
+0

안녕하세요. , 고맙습니다. 나는 네가 한 말을 어떻게 할 지 모르겠다. 더 설명 할 수 있습니다. 감사합니다 – lolian

+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.com)에 정의 된 메소드입니다. com/javase/7/docs/api/java/lang/Object.html). 객체를 비교하는 데 사용되는 클래스 인'MeterNumber' 클래스의 메소드를 오버라이드해야합니다. – mkobit

+0

@MikeKobit 좋습니다! 고마워. 방금 연구를했습니다. 고맙습니다 – lolian