Java HashMap Assignment的问题

时间:2014-01-26 15:25:35

标签: java

由于某种原因,我的项目中的这个功能失败了:

public void SetPlayersLineups(HashMap<Integer, Player> _players, 
    ArrayList<Integer> _lineup, boolean isAwayTeam) {

    System.out.println(_players.get(2)); //works properly
    System.out.println(_players.get(2).getNumberHits()); //null pointer exception

    if (isAwayTeam) {
        this.awayLineup = _lineup;
        this.awayPlay = _players;
    } else {
        this.homeLineup = _lineup;
        this.homePlay = _players;
    }

}

/* from Player class */

public int getNumberHits() {

    return this.hits;

}

我有一个Player类,其成员获取函数getNumberHits()。未正确设置this.awayPlay和this.homePlay属性。所以我使用System.out.println语句进行了调试。第一个正确返回一个Player实例。但是当我调用get函数时,我得到一个空指针异常。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

好的,一次一件事。首先,您打印_players.get(2).getNumberHits()并获得NPE。 _players.get(2)返回null,或getNumberHits()执行引发NPE的操作。情况并非如此_players2null,因为您已经说过有效。

因此,您需要查看您传递的对象_players的错误。我建议您尝试设置断点并使用IDE(例如Eclipse或Netbeans)分析对象

答案 1 :(得分:1)

如果hits被声明为Integernull,则此方法为:

Integer hits; // default value of objects is null

public int getNumberHits() {
    return hits;    
}

将因auto unboxing而抛出NPE,因为该方法实际编译为:

public int getNumberHits() {
    return hits.intValue();    
}

将值分配给hits

Integer hits = 0;

或授予hits int类型,其默认值为0,而不是null

int hits;

答案 2 :(得分:0)

问题是hits为null,并且Java尝试将autobox命中(Integer)命中为int,并产生NullPointerException