Ho un problema con questa classe Libretto che si trova a questa pagina:
http://homes.dico.unimi.it/~capra/provaSet08/
mi dice in esecuzione che alla riga 217 il tostring
Exception in thread main java.lang.NullPointerException
at Libretto.toString(Libretto.java:215)
at java.lang.String.valueOf(unknown Source)
at java.lang.Strinf.Builder.append(Unknown Source)
at TestLibretto.main(TestLibretto.java:26)
import java.util.*;
import java.io.*;
class Libretto{
// campi
private String nome;
private String cognome;
private String cdl;
private int matricola;
private int n_esami;
private Esame [] Libretto;
// costruttore
public Libretto ( String nome, String cognome, String cdl, int matricola, int n_esami) {
this.nome = nome;
this.cognome = cognome;
this.cdl = cdl;
this.matricola = matricola;
this.n_esami = n_esami;
Libretto = new Esame[n_esami];
}
//metodi
public boolean aggiunge (Esame nuovo) {
if(nuovo == null || nuovo.cdl() != this.cdl() || nuovo.cdl() == null || this.cdl() == null || this.quanti() == n_esami )
return false;
if( (quanti() -1)== n_esami)
return false;
Libretto [this.quanti()] = nuovo; // inserisci nuovo esame
return true;
}
public Esame cancella () {
int a = 0;
if(Libretto == null)
return null;
a = this.quanti()-1;
Libretto [this.quanti()-1] = null; // cancella esame nella precedente posizione
return Libretto[a];
}
public String cdl () {
return cdl;
}
public String cognome (){
return cognome;
}
public Date data (Esame e){
int a = 0;
if( e == null || this.cdl() != e.cdl())
return null;
for (int i = 0; i <this.quanti() -1; i++){
if( Libretto[i].equals(e) )
a = i;
}
return Libretto[a].data();
}
public int esamiPrimaDi(Date data){
int n = 0; //contatore
if (Libretto == null || data == null)
return 0;
for (int i = 0; i <this.quanti() -1; i++){
if(Libretto[i].data().before(data) ){ // controllo le date minori di data
n++;
}
}
return n; // ritorni il numero di esami sostenuti prima di quella data
}
public int matricola (){
return matricola;
}
public Double media (){
int cont = 0;
int somma = 0;
double media = 0;
for (int i = 0; i < this.quanti() - 1; i++){
somma = somma + Libretto[i].voto(); // ...sommo i voti
media = (double) (somma/(i+1)); //fa la media
}
return media;
}
public String nome (){
return nome;
}
public int quanti (){
int i = 0;
for (i = 0; i <n_esami; i++){ // esamino il libretto
if (Libretto[i] == null){ // Se arrivi a null fermati
break;
}
}
return i+1; // ritorna esami registrati
}
public Esame sostenuto (String corso){ //mezzo giusto
int a = 0;
if(corso == null || this.cdl() == null)
return null;
for(int i = 0;i<this.quanti();i++){
if (Libretto[i].corso() == corso) // controllo che i corsi siano identici
a = i;
}
return Libretto[a]; // ritorna il riferimento
}
public Esame ultimo(){
Date data = new Date();
int a = 0;
if (Libretto == null)
return null;
for (int i = 1; i <this.quanti()-1; i++){ //i =1 per confrontare con il precedente
if(Libretto[i].data().after(Libretto[i-1].data()) ){ //controllo la data più recente
if (data.after(Libretto[i].data())) // confronta la data maggiora tra le 2 con la data maggiore in precedenza
data = Libretto[i].data(); // inserimento in data della data più recente
a = i;
// esame con data più recente
}
}
return Libretto[a];
}
public String toString(){
String s = " ";
if (Libretto == null)
return s;
for (int i = 0; i <=this.quanti()-1; i++){
s = s + Libretto[i].toString();
}
return s;
}
}//fine classe