2016-05-17 150 views
0

我有一個快速的問題,我在這裏要做的是,從哈希映射中獲得學生,併爲學生的標記添加一個雙標記。java改變哈希映射的值

可以說我有一個名爲Student和Student類的類具有名爲addToMark()和Hashmap的方法,名爲theStudent = new HashMap<String, Student>

public void addExtraMark(String studentNumber, double mark) { 
    if(stuentNumber != null && mark >= 0) { 
     Student extraMark = theStudent.get(studentNumber); 
     extraMark.addToMark(mark)}; 
    } 
} 

我的問題是,標記是否增加了散列表?自動?或者我必須使用

theStudent.put(studentNumber, extraMark); 

我的代碼底部?

回答

2

由於Student extraMark是對該學生的引用,因此對引用做的任何操作都將反映在HashMap中。

不,你沒有撥打電話:

theStudent.put(studentNumber, extraMark); 
1

在此代碼:

Student extraMark = theStudent.get(studentNumber); 
extraMark.addToMark(mark)}}; 

如果studentNumber不散列圖存在,get回報null。然後extraMark.addToMark會拋出一個NullPointerException

所以,你必須檢查自己,例如:

Student extraMark; 
if (theStudent.containsKey(studentNumber)) { 
    extraMark = theStudent.get(studentNumber); 
} else { 
    extraMark = new Student(.......); 
    theStudent.put(studentNumber, extraMark); 
} 
extraMark.addToMark(mark); 

,或者你做get第一和檢查結果爲null

注:我假設你的問題「確實增加了hashmap」意味着「如果它不在那裏,它是否會向hashmap添加一個新學生」,但是在重讀你的問題之後,米不清楚你的意思。