Hashmap Holen gibt null zurück
Habe ich zwei Hashmaps
HashMap<Integer, Integer> inventoryRequirements = new HashMap<Integer, Integer>();
HashMap<Integer, Integer> inventory = new HashMap<Integer, Integer>();
Ich habe eine Schleife, die überprüft, aktuelle und fügt hinzu:
for(Item item : items){
int currentRequirement = 0;
currentRequirement = inventoryRequirements.get(item.get_id());
inventoryRequirements.put(item.get_id(), currentRequirement++);
}
Habe ich noch eine Schleife, die überprüft, Inventar und fügt hinzu:
for(Item item : items){
int currentInventory = 0;
//this next line returns null
currentInventory = inventory.get(item.get_id());
inventory.put(item.get_id(), currentInventory++);
}
Die erste funktioniert einwandfrei, aber die zweite kotzt und eine null zurück. Ich verstehe nicht, warum die zweite nicht funktioniert. Beide sind zunächst in den gleichen Zustand, wie dargestellt in der code sample.
BEARBEITEN
Den beiden HM bekommen bevölkert, wie Sie hier sehen - wirklich!!!! Ich weiß, es ist schwer zu glauben, aber die erste funktioniert und die zweite nicht.
Haben Sie jemals
Wenn
Es wird nie auf die Linie zu setzen alles in es. Warum nicht die Karte statt - ich habe keine gute Antwort für diese - ist es ein echter Vorteil?
Jeder Aufruf
Weil Sie haben offensichtlich andere code zwischen der ersten und zweiten snippet, das Sie sich nicht uns zu zeigen.
put
alles in inventory
? Auch, warum nicht Map<Item, Integer>
s?Wenn
inventoryRequirements
beginnt leer, der erste loop wird auch scheitern.Es wird nie auf die Linie zu setzen alles in es. Warum nicht die Karte statt - ich habe keine gute Antwort für diese - ist es ein echter Vorteil?
Jeder Aufruf
get(int)
auf eine leere HashMap
zurück null
.Weil Sie haben offensichtlich andere code zwischen der ersten und zweiten snippet, das Sie sich nicht uns zu zeigen.
InformationsquelleAutor Roy Hinkley | 2013-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sowohl die Schleifen, die Sie zeigen, werfen ein
NullPointerException
(NPE), wenn der Schlüssel, den Sie anfordern überget()
ist nicht in derMap
.Map.get()
zurücknull
wenn der Schlüssel nicht vorhanden ist (oder natürlich, wenn der gespeicherte Wert mit dem Schlüsselnull
). EinInteger
(autoboxed-Typ), istnull
können nicht autounboxed in eineint
so dass es wirft eine NPE.Den sicheren Art und Weise der Durchführung ist dies:
Natürlich, es ist auch absolut möglich, dass Sie eine
Item
in Ihrer Sammlung, dienull
und , dass ist, was wirft der NPE.int
.Wenn
get()
zurücknull
es wirft. Oder, seine JVM/computer kaputt ist 😉 ich bin Neigung in Richtung einerItem
wirdnull
selbst.InformationsquelleAutor Brian Roach
Wenn der code, den Sie gestellt haben, abgeschlossen ist, dann haben Sie nicht setzen alles in Ihren
hashmap
.So wird es immer wieder
null
.Das ist unwahr. Die
foreach
Schleife wird nicht Durchlaufen dieHashMap
, wenn so ein Fall.Wie kommt das ?? Foreach-Schleife wird Durchlaufen, die auf der Liste<Items - >.. habe ich Kraft bekommen, warum Sie scheitern würde..
Was er bedeutet, ist der code innerhalb der foreach-wird scheitern, weil von dem, was Brian sagt in seiner Antwort.
InformationsquelleAutor Prasad Kharkar
Sind Sie immer ein Element aus
inventory
aber es ist leerInformationsquelleAutor lleon
Ist die beste Methode schreiben Sie den code in der folgenden Weise:
InformationsquelleAutor