0
내 프로그램에서 해시 맵 문제가 발생하여 이전 해시 맵 항목의 값을 덮어 쓰면 다른 키가있는 두 항목이 삭제됩니다. 그것이 상기 방법 playerTotalWinnings 및 playerSimilarities의 값을 덮어 주위이 루프가 아니라 다른 키에도 불구하고 해시 맵 항목이 이전 항목을 덮어 씁니다.
키 winningsPerPlayer.put
의해 생성 된 해시 맵에서 이전 항목으로, 두 번째 실행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);
}
}
}
는 프로그램을 실행할 때 사용자가 입력 한 플레이어의 이름입니다. 여러 사용자가 동일한 세션 내에서 프로그램을 실행할 수 있습니다.
세션 당 여러 사용자가 실행하는 경우 어떤 키 값이 대체되는지 확인하려면 일부 로깅을 추가하는 것이 좋습니다. –
비슷한 문제에 대해 https://stackoverflow.com/questions/16522542/hashmap-values-of-existing-keys-getting-overwritten-upon-using-put-to-store-a-ne을 참조하십시오. 지정된 키에 대해 맵에서 Tuple을 검색하고 누락 된 경우 새 키를 삽입해야합니다. –
@JoopEggen entry.getPerson()은이 문제와 아무 관련이 없습니다. 결과로 공유되고 겹쳐 쓰여지는 것은 numberTransporter입니다. –