У меня есть HashMap под названием examList
, в котором хранятся оценки по экзаменам для каждого курса, пройденного студентом.Ключ этого хэш-карты 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.");
}
}
Как видите, я сначала определяю gradeList, но пока не инициализирую его.В разделе ЕСЛИ я проверяю, сдал ли студент этот экзамен раньше.Если он этого не сделал, то для hashmap создается новая запись, и gradeList наконец инициализируется.В ELSE (где считается, что элемент с gradeList уже инициализирован) я просто добавляю новую оценку.Однако это, похоже, проблема.Я не могу скомпилировать его, потому что программа предполагает, что gradeList здесь еще не инициализирован.Итак, как я могу это исправить?Или я могу избежать этого (поскольку, по логике вещей, gradeList всегда будет инициализироваться в ELSE) посредством обработки ошибок, о которой я мало знаю?