ved*_*ran 4 java initialization arraylist
我有一个HashMap examList
,用于存储学生每门课程的考试成绩.这个hashmap的关键是courseID
,并且值是一个数组列表gradeList
,其中包含学生在课程中获得的所有成绩.问题如下:
// Add a new course exam listing
// where each course exam can be done a max 5 times
protected void addExam(String courseID, int grade) {
ArrayList<Integer> gradeList;
// First check if course is in the list, if not add it
if ( !examList.containsKey(courseID) ) {
gradeList = new ArrayList<Integer>();
examList.put(courseID, gradeList);
examList.get(gradeList.add(grade));
// If course is already on the list, check if max number of attempts has been reached, if not add new grade
} else if ( examList.containsKey(courseID)) {
if ( gradeList.size() <= 5 ) // THIS IS WHERE ERROR OCCURES
examList.get(gradeList.add(grade)); // HERE ALSO
else
System.out.println("Maxim number of attempts has been reached.");
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我首先定义了gradeList,但我还没有初始化它.在IF下我检查学生之前是否已经完成了这个考试.如果他没有为hashmap创建新条目,则最终初始化gradeList.在ELSE下(其中,认为有一个已经初始化了gradeList的元素)我只是添加了新的等级.但是,这似乎是个问题.我无法编译它,因为程序假定gradeList尚未在此处初始化.那么,我该如何解决这个问题呢?或者我可以通过错误处理来避免它(因为从逻辑上讲,gradeList将始终在ELSE下初始化),我对此一无所知?
ArrayList<Integer> gradeList = null;
Run Code Online (Sandbox Code Playgroud)
在您的情况下,最好采取以下措施:
List<Integer> gradeList = examList.get(courseID);
if(gradeList == null) {
gradeList = new ArrayList<Integer>();
//... do something
} else {
//... do something else
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13140 次 |
最近记录: |