Java, comment puis-je éviter “n'aurait pas été initialisé”

J'ai une table de hachage appelé examList permettant de stocker des notes obtenues à l'examen de chaque cours, un étudiant a pris. La clé de cette table de hachage est courseID, et la valeur est une liste de tableau gradeList qui contient toutes les notes d'un étudiant a obtenu dans un cours. Le problème est comme suit:

//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.");
    }
}

Comme vous pouvez le voir j'ai d'abord définir gradeList, mais je n'ai pas encore l'initialiser. Sous SI je vérifier si l'étudiant a déjà fait cet examen avant de. Si il n'a pas alors la nouvelle entrée est créée pour table de hachage, et gradeList est enfin initialisé. En vertu de l'AUTRE (où, il est considéré qu'il ya un élément avec gradeList déjà initialisé) je viens d'ajouter un nouveau grade. Cependant, ce qui semble être le problème. Je ne peux pas le compiler car le programme suppose que gradeList n'est pas encore initialisée ici.
Alors, comment puis-je résoudre ce problème? Ou puis-je l'éviter (puisque logiquement, gradeList sera toujours initialisé sous d'AUTRE) à travers la gestion d'erreur, dont je sais peu de choses sur?

Vous n'initialisez gradeList dans le si-partie. Partout ailleurs, la liste n'est pas initialisé et vous obtiendrez une erreur. De vous extrait de code, il n'est pas clair que gradeList est initialisé n'importe où ailleurs dans votre code. Donc quand vous dites que vous assumez gradeList est initialisée dans l'autre, si une partie de votre code, comment est-ce fait?

OriginalL'auteur vedran | 2011-11-01