尽管有不同的密钥

时间:2017-11-27 11:30:00

标签: java hashmap tuples

我在我的程序中遇到了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中的先前条目

键是用户在运行程序时输入的播放器名称。多个用户可以在同一会话中运行该程序。

1 个答案:

答案 0 :(得分:1)

关键可能不同。但该值不是-_-°

你需要在循环中创建一个新的元组,而不是不断地修改循环之前创建的元组。

一般来说,像元组这样的东西在创建之后不需要修改,它应该用它包含的两个值创建,并且永远不会改变它。所以它应该是不可变的,带有最终值,以便你避免那种愚蠢的错误。