Ich habe Probleme mit einer Hashmap in meinem Programm, die den Wert von vorherigen Hashmap-Einträgen überschreibt, die die zwei Einträge mit unterschiedlichen Schlüsseln überschreiben.Hashmap-Eintrag überschreibt vorherigen Eintrag trotz unterschiedlichen Schlüssels
public void drawTheNumbers() {
final int NO_WIN = 0;
int playerOneTicketWinning = 0;
Tuple numberTransporter = new Tuple (0,0);
for(Journal entry : theJournal) {
playerOneTicketWinning = entry.getWinning();
if (winningsPerPlayer.containsKey(entry.getPerson())) {
numberTransporter.playerTotalWinnings = numberTransporter.playerTotalWinnings + playerOneTicketWinning;
numberTransporter.playerSimilarities = numberTransporter.playerSimilarities + entry.getSimilarities();
winningsPerPlayer.put(entry.getPerson(), numberTransporter);
}else {
numberTransporter.playerTotalWinnings = playerOneTicketWinning;
numberTransporter.playerSimilarities = entry.getSimilarities();
winningsPerPlayer.put(entry.getPerson(), numberTransporter);
}
}
for (Map.Entry<String, Tuple> player: winningsPerPlayer.entrySet()) {
int temp1 = numberTransporter.getplayerTotalWinnings();
int temp2 = NO_WIN;
if (temp1 == temp2) {
noWinMessage (player.getKey());
}else {
playerWinningsMessage(player.getKey(), numberTransporter);
}
}
}
Wenn diese Schleife das zweite Mal ausgeführt wird, um sie um die Werte von playerTotalWinnings playerSimilarities und in dem Verfahren, das oben überschrieben werden, sondern auch in dem Eintrag in der zuvor HashMap von winningsPerPlayer.put erstellt
Der Schlüssel ist der Name des Spielers, den der Benutzer beim Ausführen des Programms eingegeben hat. Mehrere Benutzer können das Programm innerhalb derselben Sitzung ausführen.
Wenn es von mehreren Benutzern pro Sitzung ausgeführt wird, sollten Sie eine Protokollierung hinzufügen, um zu sehen, für welche Schlüssel Werte ersetzt werden. –
Siehe https://stackoverflow.com/questions/16522542/hashmap-values-of-existing-keys-getting-overwritten-upon-using-put-to-store-a-ne für ähnliche Probleme. Sie müssen Tuple aus der Karte für den angegebenen Schlüssel abrufen und einen neuen einfügen, wenn dieser fehlt. –
@JoopEggen entry.getPerson() hat nichts mit dem Problem zu tun. Es ist der numberTransporter, der geteilt und mit Ergebnissen überschrieben wird. –