Buon pomeriggio a tutti.
Ma a cosa è dovuta l'eccezione java.lang.NullPointerException?
Vi posto il mio Gestore di due classi chiamate Cittadino e Presidente:
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Scanner;
public class Gestore
{
private ArrayList<Cittadino> cittadini;
private ArrayList<Presidente> presidenti;
public Gestore(Scanner scC, Scanner scP, Scanner scCP) throws CittadinoNotFoundException, PresidenteNotFoundException
{
ArrayList<Cittadino> cittadini = new ArrayList<Cittadino>();
Cittadino c = Cittadino.read(scC);
while(c!=null)
{
cittadini.add(c);
c=Cittadino.read(scC);
}
ArrayList<Presidente> presidenti = new ArrayList<Presidente>();
Presidente p = Presidente.read(scP);
while(p!=null)
{
presidenti.add(p);
p=Presidente.read(scP);
}
PresidenteCittadino prCi = PresidenteCittadino.read(scCP);
while(prCi!=null)
{
Cittadino cit = this.searchCittadino(prCi.getCodiceFiscale());
Presidente pr = this.searchPresidente(prCi.getMatricola());
prCi.setCittadino(cit);
prCi.setPresidente(pr);
{
if(cit!=null)
{
pr.addCittadino(cit);
}
if(pr!=null)
{
cit.setPresidente(pr);
}
}
prCi=PresidenteCittadino.read(scCP);
}
}
public Gestore(ArrayList<Cittadino> cit, ArrayList<Presidente> pr)
{
cittadini=cit;
presidenti=pr;
}
public Cittadino searchCittadino(String codiceFiscale) throws CittadinoNotFoundException
{
boolean trovato = false;
int i=0;
Cittadino cittadino = null;
while(trovato=false && i<cittadini.size())
{
if(cittadini.get(i).getCodiceFiscale().equalsIgnor eCase(codiceFiscale))
{
trovato = true;
cittadino=cittadini.get(i);
}
else
{
i++;
}
}
if(trovato=true)
{
return cittadino;
}
else
{
throw new CittadinoNotFoundException (codiceFiscale);
}
}
public Presidente searchPresidente(String matricola) throws PresidenteNotFoundException
{
boolean trovato = false;
int i = 0;
Presidente pr = null;
while(trovato = false &&i<presidenti.size())
{
if(presidenti.get(i).getMatricola().equalsIgnoreCa se(matricola))
{
trovato = true;
pr=presidenti.get(i);
}
else
{
i++;
}
}
if(trovato=true)
{
return pr;
}
else
{
throw new PresidenteNotFoundException(matricola);
}
}
public Gestore filterByMatricola(String matricola)
{
ArrayList<Cittadino> cit = new ArrayList<Cittadino>();
ArrayList<Presidente> pr = new ArrayList<Presidente>();
boolean trovato = false;
int i = 0;
while(!trovato && i < presidenti.size())
{
if(presidenti.get(i).getMatricola().equalsIgnoreCa se(matricola))
{
pr.add(presidenti.get(i));
for(Cittadino c : presidenti.get(i).getCittadini())
{
cit.add(c);
}
trovato = true;
}
}
return new Gestore(cit, pr);
}
public void printCittadini(PrintStream pr)
{
//CODE
for(Cittadino cit : this.cittadini)
{
cit.print(pr);
}
}
public void printPresidenti(PrintStream pr)
{
for(Presidente p : this.presidenti)
{
p.print(pr);
}
}
public void printAll(PrintStream pr)
{
CODE
printCittadini(pr);
printPresidenti(pr);
}
}
Cliccano sul numero di riga che quell'eccezione mi indica, mi porta sul metodo 'printCittadini' e conseguentemente sul 'printAll'. Ma perchè? Probabilmente l'ArrayList<Cittadino> cittadini non viene riempito ma perchè?
Grazie a tutti.