2013-07-02 3 views
5

나는이 두 HashMaps을해시 맵 얻을 NULL을 반환

HashMap<Integer, Integer> inventoryRequirements = new HashMap<Integer, Integer>(); 
HashMap<Integer, Integer> inventory = new HashMap<Integer, Integer>(); 

I가 현재 확인하고에 추가 루프 :

for(Item item : items){ 
    int currentRequirement = 0; 
    currentRequirement = inventoryRequirements.get(item.get_id()); 
    inventoryRequirements.put(item.get_id(), currentRequirement++);   
} 

I가 재고를 확인하고에 추가 다른 루프 :

for(Item item : items){ 
    int currentInventory = 0; 
    // this next line returns null 
    currentInventory = inventory.get(item.get_id()); 
    inventory.put(item.get_id(), currentInventory++);   
} 

첫 번째 동작은 정상적으로 작동하지만 두 번째 동작은 정상 동작하고 null을 반환합니다. 나는 두 번째 것이 효과가없는 이유를 이해하지 못한다. 둘 다 초기에 코드 샘플에 표시된 것과 동일한 상태에 있습니다.

EDIT 당신이 여기에서 보는 바와 같이

두 HM이 채워 - 정말! 나는 그것이 믿기 어려울 수도 있지만 첫 번째 작품은 두 번째 작품이 아니라는 것을 압니다.

+7

'inventory'에 어떤 것을 넣었습니까? 또한'Map '를 사용하지 않을까요? – Jeffrey

+2

'inventoryRequirements'가 공백으로 시작하면 첫 번째 루프도 실패합니다. – Joni

+0

아무 것도 넣지 않을 수 없습니다. 왜지도 대신에 - 나는 그것에 대한 좋은 대답이 없습니다 - 진짜 이점이 있습니까? –

답변

1

제공하신 코드가 완성 된 경우 귀하의 hashmap에 아무 것도 입력하지 않았습니다. 그래서 항상 null을 반환합니다.

+0

True를 사용하십시오! 하지만이 경우 코드의 첫 번째 부분이 잘 돌아가고 있는지 궁금합니다. – PVR

+0

그건 사실이 아닙니다. 'foreach' 루프 자체는'HashMap'을 반복하지 못합니다. – Lion

+0

어째서 ?? Foreach 루프가 목록 에서 반복되고 있습니다. 내가 실패 할 이유가 생겼습니다. – PVR

0

당신은 inventory에서 항목을 얻고있다 그러나 당신이 당신이 get()를 통해 요청 키가 Map에없는 경우 NullPointerException (NPE)를 던질 것이다 보여 루프의

10

모두 비어 있습니다.

Map.get() 키가없는 경우 (물론 해당 키와 함께 저장된 값이 null 인 경우) null을 반환합니다. nullInteger (자동 보관 유형)은 int에 autounbox 될 수 없으므로 NPE를 발생시킵니다.

이 수행하는 안전한 방법은 다음과 같습니다 물론

for (Item item : items) { 
    Integer currentRequirement = inventoryRequirements.get(item.get_id()); 
    if (currentRequirement != null) { 
     inventoryRequirements.put(item.get_id(), currentRequirement++);   
    } 
} 

, 것 또한 가능한 완벽하게 당신이이 NPE를 던지고 어떤 것을 null이다 컬렉션에 Item이 있는지 확인하십시오.

+0

+1 마지막 포인트는 +1하지만 null을 반환하고 null을 던지지 않는다고 말하지만 'int'이기 때문에 이해가되지 않습니다. –

+0

'get()'이'null'을 반환하면 던졌습니다. 또는 그의 JVM/컴퓨터가 고장났습니다;) 나는'Item'이'null', 나 자신으로 향하고 있습니다. –