Java - 方法中的NullPointerException

时间:2012-07-28 14:11:38

标签: java nullpointerexception

我正在编写一个程序,可以管理具有课程和科目的普通学生。我告诉你的课程的问题是当方法

public CorsoStudi(String unNomeCorso,ArrayList unElencoMaterie,int unIdCorso)

被调用它会在 elencoEsamiDati.add(q); 行抛出NullPointerException。所以,可能问题在于这一行以及此后的行:

EsameDato q = new EsameDato(unElencoMaterie.get(contatore),0);

Eclipse不会在编写代码时提出错误建议。

Creatore.java

import java.util.ArrayList;
import java.util.Scanner;

public class Creatore {

int counterStudenti = 0;
int counterMaterie = 0;
int counterCorsi = 0;
//int counterEsami = 0;
ArrayList<Studente> listaStudenti = new ArrayList<Studente>();
ArrayList<Materia> listaMaterie = new ArrayList<Materia>();
ArrayList<CorsoStudi> listaCorsi = new ArrayList<CorsoStudi>();
//ArrayList<EsameDato> listaEsami = new ArrayList<EsameDato>();


public void iscriviStudente(String nomeStudente, String cognomeStudente, CorsoStudi corsoStudente){
    listaStudenti.add(new Studente(nomeStudente, cognomeStudente, counterStudenti, corsoStudente));
    counterStudenti++;
}

public void reimmatricolaStudente(int unaMatricola, int unIdCorso){
    int c = 0;
    CorsoStudi unCorso = null;
    for(c = 0; c < listaCorsi.size(); c++){
        if(listaCorsi.get(c).getIdCorso() == unIdCorso)
            unCorso = listaCorsi.get(c);
    }
    int contatore = 0;
    for(contatore = 0; contatore < listaStudenti.size(); contatore++)
        if(listaStudenti.get(contatore).getMatricola() == unaMatricola){
            iscriviStudente(listaStudenti.get(contatore).getNome(), listaStudenti.get(contatore).getCognome(), unCorso);
            rimuoviStudente(unaMatricola);
        };
}

public void rimuoviStudente(int matricola){
    int contatore;
    for(contatore = 0; contatore < listaStudenti.size(); contatore++){
        if(listaStudenti.get(contatore).getMatricola() == matricola)
            listaStudenti.remove(contatore);
    }
}

public Materia creaMateria(String nomeMateria, int crediti){
    listaMaterie.add(new Materia( nomeMateria, crediti, counterMaterie));
    counterMaterie++;
    return listaMaterie.get(counterMaterie - 1);
}

public void creaCorsoStudi(String nomeCorso, ArrayList<Materia> materieCorso){
    CorsoStudi q = new CorsoStudi( nomeCorso, materieCorso, counterCorsi);
    listaCorsi.add(q);
    counterCorsi++;
}

public ArrayList<Studente> cercaStudente(int opzione, String pattern){
    int contatore = 0;
    ArrayList<Studente> listaRicercati = new ArrayList<Studente>();
    //opzione 1 = ricerca per nome
    if(opzione == 1)
        for(contatore = 0; contatore < listaStudenti.size(); contatore++){
            if(listaStudenti.get(contatore).getNome().equalsIgnoreCase(pattern))
                listaRicercati.add(listaStudenti.get(contatore));
        };
    //opzione 2 = ricerca per cognome
    if(opzione == 2)
        for(contatore = 0; contatore < listaStudenti.size(); contatore++){
            if(listaStudenti.get(contatore).getCognome().equalsIgnoreCase(pattern))
                listaRicercati.add(listaStudenti.get(contatore));
    };
    //opzione 3 = ricerca per matricola
    if(opzione == 3)
        for(contatore = 0; contatore < listaStudenti.size(); contatore++){
            if(listaStudenti.get(contatore).getMatricola() == Integer.parseInt(pattern))
                listaRicercati.add(listaStudenti.get(contatore));
    };
    //opzione 4 = ricerca per corsoStudi
    if(opzione == 4)
        for(contatore = 0; contatore < listaStudenti.size(); contatore++){
            if(listaStudenti.get(contatore).getCorsoStudi().getIdCorso() == Integer.parseInt(pattern))
                listaRicercati.add(listaStudenti.get(contatore));
    };

    return listaRicercati;
}

public Materia materiaDaId(int id){
    int c = 0;
    Materia materiaDaRitornare = null;
    for(c = 0; c < listaMaterie.size(); c++){
        if(listaMaterie.get(c).getIdMateria() == id)
            materiaDaRitornare = listaMaterie.get(c);
    }
    return materiaDaRitornare;
}
}

CorsoStudi.java

import java.util.ArrayList;
import java.util.Scanner;

public class CorsoStudi {

private String nomeCorso;
private int idCorso;
private ArrayList<Materia> elencoMaterie;
private ArrayList<EsameDato> elencoEsamiDati;

public CorsoStudi(String unNomeCorso, ArrayList<Materia> unElencoMaterie, int unIdCorso){
    nomeCorso = unNomeCorso;
    elencoMaterie = unElencoMaterie;
    idCorso = unIdCorso;
    int contatore = 0;
    //EsameDato q = null;
    for(contatore = 0; contatore < unElencoMaterie.size(); contatore++){
        EsameDato q = new EsameDato(unElencoMaterie.get(contatore), 0);
        elencoEsamiDati.add(q);
    };
}

public String getNomeCorso(){
    return nomeCorso;
}

public int getIdCorso(){
    return idCorso;
}

public ArrayList<Materia> getElencoMaterie(){
    return elencoMaterie;
}

public ArrayList<EsameDato> getElencoEsamiDati(){
    return elencoEsamiDati;
}

public String toString(){
    String s = "";
    s = s + "Ecco le materie di questo Corso di Studi:\n";
    int c = 0;
    for(c= 0; c < elencoMaterie.size(); c++){
        s = s + elencoMaterie.get(c).getIdMateria() + " "; 
        s = s + elencoMaterie.get(c).getNomeMateria() + " (";
        s = s + elencoMaterie.get(c).getCrediti() + " crediti)\n";
    }
    return s;
}
}

1 个答案:

答案 0 :(得分:2)

您尚未初始化字段elencoEsamiDati,因此实际值为null

在向ArrayList添加元素之前,您需要创建它:

private ArrayList<EsameDato> elencoEsamiDati = new ArrayList<EsameDato>();

您可能还需要初始化其他字段。

BTW在编程时使用自己的语言并不是一个好主意,而是使用英语。