我在我的程序中遇到了Hashmap的问题,覆盖了以前的Hashmap条目的值,这两个条目具有不同的密钥。
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);
}
}
}
当第二次运行此循环时,它将覆盖上述方法中的playerTotalWinnings和playerSimilarities的值,但也会覆盖winningsPerPlayer.put创建的Hashmap中的先前条目
键是用户在运行程序时输入的播放器名称。多个用户可以在同一会话中运行该程序。
答案 0 :(得分:1)
关键可能不同。但该值不是-_-°
你需要在循环中创建一个新的元组,而不是不断地修改循环之前创建的元组。
一般来说,像元组这样的东西在创建之后不需要修改,它应该用它包含的两个值创建,并且永远不会改变它。所以它应该是不可变的,带有最终值,以便你避免那种愚蠢的错误。