0

私は、大学の学生をコースと科目で管理できるプログラムを書いています。私がお見せしているクラスの問題は、メソッドが

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;
}
}
4

1 に答える 1

2

フィールドを初期化していないelencoEsamiDatiため、実際の値はnullです。

に要素を追加する前に、ArrayListそれを作成する必要があります:

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

他のフィールドも初期化する必要がある場合があります。

ところで、プログラミング時に独自の言語を使用することはお勧めできません。代わりに英語を使用してください。

于 2012-07-28T14:14:36.697 に答える