Riprendo questo post poiché mi sono imbattuto di nuovo in un problema simile.
Sto esercitandomi su un esercizio che gestisce un campionato di calcio.
Il campionato è costituito da una serie di squadre ognuna delle quali è rappresentata da un nome e da una città.
Da un elenco di giornate rappresentate da un numero progressivo, la data e una serie d'incontri.
Un incontro viene disputato da una squadra di casa e da una in trasferta in un determinato stadio.
Queste sono le classi del mio progetto:
// Campionato
public class Campionato {
private List<Squadre> listaSquadre = new ArrayList<Squadre>();
private List<Giornata> listaGiornate = new ArrayList<Giornata>();
public Campionato() {}
public List<Squadre> getListaSquadre() {
return listaSquadre;
}
public List<Giornata> getListaGiornate() {
return listaGiornate;
}
public void setListaSquadre(List<Squadre> listaSquadre) {
this.listaSquadre = listaSquadre;
}
public void setListaGiornate(List<Giornata> listaGionate) {
this.listaGiornate = listaGionate;
}
public void aggiungiSquadra (Squadre s) {
this.listaSquadre.add(s);
}
public void aggiungiGiornata (Giornata g) {
this.listaGiornate.add(g);
}
}
// Squadre
public class Squadre {
private String nome;
private String citta;
public Squadre() {}
public Squadre(String nome, String citta) {
this.citta = citta;
this.nome = nome;
}
public String getNome() {
return nome;
}
public String getCitta() {
return citta;
}
public void setNome(String nome) {
this.nome = nome;
}
public void setCitta(String citta) {
this.citta = citta;
}
@Override
public String toString() {
return nome;
}
public String toStringClasse() {
String stringa="";
stringa += "Nome" + nome +"\n";
stringa += "Città" + citta;
return stringa;
}
// Giornata
public class Giornata {
private String numeroGiornata;
private Calendar data = new GregorianCalendar();
private List<Incontri> listaIncontri = new ArrayList<Incontri>();
public Giornata() {}
public Giornata(String numeroGiornata, Calendar data) {
this.numeroGiornata = numeroGiornata;
this.data = data;
data.getTime();
data.setLenient(false);
}
public String getNumeroGiornata() {
return numeroGiornata;
}
public Calendar getData() {
return data;
}
public List<Incontri> getListaIncontri() {
return listaIncontri;
}
public void setNumeroGiornata(String numeroGiornata) {
this.numeroGiornata = numeroGiornata;
}
public void setData(Calendar data) {
this.data = data;
}
public void setListaIncontri(List<Incontri> listaIncontri) {
this.listaIncontri = listaIncontri;
}
public void aggiungiIncontro(Incontri incontro) {
this.listaIncontri.add(incontro);
}
public Incontri getIncontri(int i) {
return this.listaIncontri.get(i);
}
public String toStringData() {
Date d = data.getTime();
SimpleDateFormat giorno = new SimpleDateFormat("EEEE dd-MMMM-yyyy");
return giorno.format(d);
}
@Override
public String toString() {
return "Giornata{" + "numeroGiornata=" + numeroGiornata + ", data=" + toStringData() + ", listaIncontri=" + listaIncontri + '}';
}
// incontri
public class Incontri {
private String stadio;
private Squadre squadraCasa;
private Squadre squadraTrasferta;
public Incontri() {}
public Incontri(String stadio, Squadre squadraCasa, Squadre squadraTrasferta) {
this.stadio = stadio;
this.squadraCasa = squadraCasa;
this.squadraTrasferta = squadraTrasferta;
}
public String getStadio() {
return stadio;
}
public Squadre getSquadraCasa() {
return squadraCasa;
}
public Squadre getSquadraTrasferta() {
return squadraTrasferta;
}
public void setStadio(String stadio) {
this.stadio = stadio;
}
public void setSquadraCasa(Squadre squadraCasa) {
this.squadraCasa = squadraCasa;
}
public void setSquadraTrasferta(Squadre squadraTrasferta) {
this.squadraTrasferta = squadraTrasferta;
}
@Override
public String toString() {
return "Incontri{" + "stadio=" + stadio + ", squadraCasa=" + squadraCasa + ", squadraTrasferta=" + squadraTrasferta + '}';
}
Il problema mi si ripresenta quando devo contare quante partite sono state giocate in un determinato stadio
Ho pensato quindi di scrivere queste linee di codice
// nella classe Giornata
public Map<String, Integer> getConta() {
Map<String, Integer> risultato = new HashMap<String, Integer>();
for (Incontro incontro : listaIncontri ) {
String stadio = incontro.getStadio();
if (risultato.containsKey(stadio)) {
Integer vecchioValore = risultato.get(stadio);
vecchioValore++;
risultato.put(stadio, vecchioValore);
} else {
risultato.put(stadio, 1);
}
}
return risultato;
}
e nella JDialog dove visualizzo la tabella:
public void inizializzaTabellaConta() {
Giornata giornata= (Giornata) this.vista.getModello().getBean(Costanti.GIORNATA);
if ( giornata == null ) {
this.visualizzaFinestraErrore(" Errore inizializzazione Scomparsi----Non è stato possibile inizializzare la Tabella Scomparsi");
}else{
logger.info("GIORNATA" + giornata.toString());
ModelloTabellaStatistiche mts = new ModelloTabellaStatistiche(giornata.conta());
this.tabellaStatistiche.setModel(mts);
this.scrollTabellaStatistiche.setViewportView(tabellaStatistiche);
}
}
Pensavo che andasse bene ma quando clicco il JButton associato all'azione mi da errore
"AWT-EventQueue-0" java.lang.NullPointerException
questo dipende perché giornata nel momento in cui io vorrei visualizzare la tabella ha valore nullo o almeno credo che sia per questo
Avevo pensato di risolvere aggiungendo al mio campionato una lista di incontri e poi ovviamente scrivere lo stesso metodo nella classe campionato.
La domanda è l'approccio giusto? Io ho il forte dubbio che non sia così.