[Java] Problema con Collection

Messaggioda fra e ste » 04/02/2012, 15:57

Ho un problema con questo programma e non capisco dove sbaglio :cry:
Poichè fra pochi giorni ho l'esame :? ci sarebbe qualcuno che ha voglia di spiegarmi dov'è l'errore?

Testo nascosto, fai click qui per vederlo
Codice: Seleziona tutto
public class Abbigliamento {
   
   private Map <String, Modello> modelli = new HashMap <String, Modello>();
   private Map <String, Colore> colori = new HashMap <String, Colore>();
   private Map <String, Materiale> materiali = new HashMap <String, Materiale>();
   private Map <String, Capo> capi = new HashMap <String, Capo>();
   private Map <String, Collezione> collezioni = new HashMap <String, Collezione>();
   
   public void leggiFile(String fileName){
      try {
            BufferedReader br = new BufferedReader (new FileReader (fileName));
            String linea;
            while ((linea = br.readLine()) != null)
            {
               StringTokenizer st = new StringTokenizer (linea, ";");
               String tipo = st.nextToken().trim();
               if (tipo.toUpperCase().equals("MOD"))
               {
                  String nome = st.nextToken().trim();
                  double costo = Double.parseDouble(st.nextToken().trim());
                  double quantita = Double.parseDouble(st.nextToken().trim());
                  
                  modelli.put(nome, new Modello(nome,costo,quantita));
               }
               else if (tipo.toUpperCase().equals("COL"))
               {
                  String nome = st.nextToken().trim();
                  
                  colori.put(nome, new Colore(nome));
               }
               else if (tipo.toUpperCase().equals("MAT"))
               {
                  String nome = st.nextToken().trim();
                  double costo = Double.parseDouble(st.nextToken().trim());
                  
                  materiali.put(nome, new Materiale(nome,costo));
               }
               else if (tipo.toUpperCase().equals("CAP"))
               {
                  String nome = st.nextToken().trim();
                  Modello mod = modelli.get(st.nextToken().trim());
                  Materiale mat = materiali.get(st.nextToken().trim());
                  Colore col = colori.get(st.nextToken().trim());
                  
                  capi.put(nome, new Capo(mod, mat, col));
               }
               else if (tipo.toUpperCase().equals("COL"))
               {
                  String nome = st.nextToken().trim();
                  collezioni.put(nome, new Collezione ());
                  String capo;
                  while ((capo = st.nextToken().trim()) != null)
                     collezioni.get(nome).add(capi.get(capo));
               }
            }
         
      } catch (FileNotFoundException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      
   }

   public Modello getModello(String name){
      return modelli.get(name);
   }

   public Colore getColore(String name){
      return colori.get(name);
   }

   public Materiale getMateriale(String name){
      return materiali.get(name);
   }

   public Capo getCapo(String name){
      return capi.get(name);
   }

   public Collezione getCollezione(String name){
      return collezioni.get(name);
   }

}


Il programma sembra non contenere errori e testandolo nel main funziona, fino al metodo getCollezione ()

Testo nascosto, fai click qui per vederlo
Codice: Seleziona tutto
Writer w = new FileWriter ("file.txt");
      w.write ("MOD;giacca;66;6.4\n" +
            "MOD;scarpe;20.4;5\n" +
            "COL;giallo\n" +
            "COL;blu\n" +
            "MAT;camoscio;12\n" +
            "MAT;pelle;99\n" +
            "CAP;capo1;giacca;pelle;giallo\n" +
            "CAP;capo2;scarpe;pelle;giallo\n" +
            "CAP;capo3;scarpe;camoscio;blu\n" +
            "COL;col1;capo1;capo3\n" +
            "COL;col2;capo1;capo2;capo3\n");
      w.close();
      
      Abbigliamento a = new Abbigliamento ();
      a.leggiFile("file.txt");
      
      Collezione collez1 = a.getCollezione("col1");
      List <Capo> cap1 = new LinkedList <Capo> (collez1.trova(a.getMateriale("pelle")));
      for (Capo c : cap1)
         System.out.println(c.toString());
      


la classe Collezione è fatta così:

Testo nascosto, fai click qui per vederlo
Codice: Seleziona tutto
public class Collezione {
   
   private List <Capo> capi = new LinkedList <Capo> ();

   public void add(Capo capo) {
      capi.add(capo);
   }

   public Collection trova(Colore colore) {
      Collection<Capo> trovati = new LinkedList<Capo> ();
      for (Capo c : capi)
      {
         if (c.getColore().getNome().equals(colore.getNome()))
            trovati.add(c);
      }
      return trovati;
   }


Grazie a tutti
fra e ste
Starting Member
Starting Member
 
Messaggi: 39
Iscritto il: 05/06/2010, 13:32

Re: [Java] Problema con Collection

Messaggioda hamming_burst » 05/02/2012, 01:00

Ciao,
se ci mostri l'output dell'errore forse è più chiaro ciò che avviene durante l'esecuzione; visto che, da quanto scrivi, la compilazione non riporta nulla.
"Un giorno tutti noi sciocchi saremo morti e allora i vivi andranno avanti. ... tutti gli uomini saranno fratelli e nessuno se ne starà al sole in panciolle a farsi nutrire dai suoi compagni"
[Jack London]

HOFL...che stress!!
Avatar utente
hamming_burst
Moderatore
Moderatore
 
Messaggi: 2270
Iscritto il: 04/07/2009, 10:53

Re: [Java] Problema con Collection

Messaggioda fra e ste » 05/02/2012, 09:33

Mi dà
Codice: Seleziona tutto
Exception in thread "main" java.lang.NullPointerException
   at Esempio.main(Esempio.java:38)


sulla riga:
Codice: Seleziona tutto
List <Capo> cap1 = new LinkedList <Capo> (collez1.trova(a.getMateriale("pelle")));


Grazie :D
fra e ste
Starting Member
Starting Member
 
Messaggi: 39
Iscritto il: 05/06/2010, 13:32


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite