我有一个叫做examList
的HashMap,它存储了学生每门课程的考试成绩。该散列表的关键是courseID
,该值是一个数组列表gradeList
,其中包含学生在课程中获得的所有成绩。问题如下:Java,我怎样才能避免“可能未被初始化”
// 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.");
}
}
正如你可以看到我首先定义gradeList,但我还没有初始化。在IF下,我检查学生是否已经完成了此考试。如果他没有为hashmap创建新条目,并且gradeList最终被初始化。在ELSE下(其中,认为有已经初始化了gradeList的元素),我只是添加新的等级。但是,这似乎是问题所在。我无法编译它,因为程序假定gradeList尚未在此初始化。 那么,我该如何解决这个问题?或者我可以通过错误处理来避免它(因为逻辑上,gradeList将始终在ELSE下初始化),对此我知之甚少?
您只在if部分初始化'gradeList'。在其他地方,列表未被初始化,您将收到错误消息。从你的代码片段中,你不清楚'gradeList'是否在你的代码的其他地方被初始化。所以当你说你认为'gradeList'是在你的代码的else-if部分被初始化时,这是如何完成的? – Pieter