2017-11-27 4 views
0

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.

+2

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. –

+0

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. –

+0

@JoopEggen entry.getPerson() hat nichts mit dem Problem zu tun. Es ist der numberTransporter, der geteilt und mit Ergebnissen überschrieben wird. –

Antwort

1

Der Schlüssel könnte anders sein. Aber der Wert ist nicht -_- °

Sie müssen ein neues Tuple innerhalb der Schleife erstellen, anstatt ständig das einzige zu ändern, das Sie vor der Schleife erstellt haben.

Im Allgemeinen sollte so etwas wie ein Tupel nach seiner Erstellung nicht geändert werden, es sollte mit den zwei Werten erstellt werden, die es enthalten wird, und niemals davon geändert werden. Also sollte es unveränderlich gemacht werden, mit endgültigen Werten, so dass Sie diese Art von dummen Fehlern vermeiden.

Verwandte Themen