2012-07-28 108 views
0

我正在编写一个可以管理具有课程和科目的大学生的程序。我展示你的类的问题是,当方法Java - 在方法中的空指针异常

公共CorsoStudi(字符串unNomeCorso,ArrayList的unElencoMaterie,诠释unIdCorso)

把它叫做在行elencoEsamiDati.add抛出一个NullPointerException( q);。所以,可能问题是这条线和此后的线:

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

“Eclipse不会在编写代码时发生错误。” - 因为NPE是运行时异常。 – Nishant 2012-07-28 14:13:29

+0

倾销你所有的代码(我猜)西班牙语无济于事。请翻译相关部分并建立SSCCE:http://sscce.com – 11684 2012-07-28 14:15:49

+0

OP不必从意大利语翻译此文。变量是变量,函数是函数。如果他们用一种语言与另一种语言进行比较,它们有什么区别 - 要讲清楚发生了什么并不难。 – Makoto 2012-07-28 14:17:29

回答

2

您还没有初始化场elencoEsamiDati因此实际值是null

之前添加元素的ArrayList您需要创建它:

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

您可能还需要初始化其他领域也是如此。

顺便说一句,编程时使用自己的语言不是一个好主意,而是使用英语。

+1

使用你自己的语言进行编程时,确实存在*没有任何问题。唯一重要的是保留字是正确的,函数和类名是一致的,并且样式是可读的。这三个地方都很适合。 – Makoto 2012-07-28 14:15:58

+0

我不同意你的看法,甚至写下这个班的名字真的很难。 – 2012-07-28 14:16:50

+0

谢谢!这是一个愚蠢的问题,但我一个小时左右就失去了。非常感谢! – 2012-07-28 14:17:19