Java,我怎么能避免"可能没有被初始化"

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下初始化),我对此一无所知?

Bhe*_*ung 8

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)