2012-07-28 4 views
0

코스 및 과목이있는 대학생을 관리 할 수있는 프로그램을 작성하고 있습니다. 내가 당신을 보여주는거야 클래스의 문제는 방법Java - 메서드에서 NullPointerException이 발생했습니다

공공 CorsoStudi (문자열 unNomeCorso, ArrayList를 unElencoMaterie는, unIdCorso를 INT)

가 호출 될 때 (라인 elencoEsamiDati.add에서 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

"코드 작성시 Eclipse에서 오류가 발생하지 않습니다." - NPE는 런타임 예외이므로 – Nishant

+0

모든 코드를 덤핑 (스페인어)하면 도움이되지 않습니다. 관련 부분을 번역하고 SSCCE를 설정하십시오 : http://sscce.com – 11684

+0

OP는 이탈리아어에서 이것을 번역 할 필요가 없습니다. 변수는 변수이고, 함수는 함수입니다. 다른 언어와 다른 언어를 사용하는 경우의 차이점은 무엇이 진행되고 있는지 말하기 어렵지 않습니다. – Makoto

답변

2

당신은 필드 elencoEsamiDati를 초기화하지 않은 때문에 실제 값은 null입니다.

ArrayList에 요소를 추가하기 전에 당신은 그것을 만들어야합니다

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

당신은 또한뿐만 아니라 다른 분야를 초기화해야 할 수도 있습니다.

BTW 프로그래밍 할 때 자신의 언어를 사용하는 것은 좋지 않습니다. 대신 영어를 사용하십시오.

+1

프로그래밍에 자신의 언어를 사용하는 데는 아무런 문제가 없습니다. 중요한 것은 예약어가 정확하고 함수와 클래스 이름이 일관되며 스타일을 읽을 수 있다는 것입니다. 여기 세 명 모두가 꽤 자리하고 있습니다. – Makoto

+0

나는 그것에 동의하지 않는다. 수업의 이름을 쓰는 일조차 정말 힘들었다. –

+0

감사! 그것은 어리석은 문제 였지만 나는 그 주위를 1 시간 잃었다. 많은 감사합니다! –

관련 문제