Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Collection in Java, come dichiararle
Forum - Java - Collection in Java, come dichiararle

Avatar
Lucym80 (Normal User)
Newbie


Messaggi: 7
Iscritto: 03/10/2019

Segnala al moderatore
Postato alle 17:38
Domenica, 19/01/2020
Salve a tutti,
è da poco che mi sto avvicinando al mondo java e sto facendo un piccolo corso, ho però dificoltà nel passare dagli Array alle collection, nel senso che ho provato a seguire le istruzioni e il programma non dà errori e riesco anche ad eseguirlo, ma il tasto 1 non va, credo perché non dichiaro bene le collection.
Potete aiutarmi a capire?
Questo è il codice.
Prima classe.
Codice sorgente - presumibilmente Java

  1. [CODE]
  2. package archivio2;
  3.  
  4. import java.io.FileInputStream;
  5. import java.io.FileNotFoundException;
  6. import java.io.FileOutputStream;
  7. import java.io.IOException;
  8. import java.io.ObjectInputStream;
  9. import java.io.ObjectOutputStream;
  10. import java.io.Serializable;
  11.  
  12. public class Artista implements Serializable {
  13.         private String nome;
  14.         private String cognome;
  15.         private String dataDiNascita;
  16.         private String biografia;
  17.         public Artista() {
  18.         }
  19.  
  20.         public String getNome() {
  21.             return nome;
  22.         }
  23.         public void setNome(String nome) {
  24.             this.nome = nome;
  25.         }
  26.         public String getCognome() {
  27.             return cognome;
  28.         }
  29.         public void setCognome(String cognome) {
  30.             this.cognome = cognome;
  31.         }
  32.         public String getDataDiNascita() {
  33.             return dataDiNascita;
  34.         }
  35.         public void setDataDiNascita(String dataDiNascita) {
  36.             this.dataDiNascita = dataDiNascita;
  37.         }
  38.         public String getBiografia() {
  39.             return biografia;
  40.         }
  41.         public void setBiografia(String biografia) {
  42.             this.biografia = biografia;
  43.             }
  44.         String fileName = "applicazione archivio.dat";
  45. Artista a;
  46. public void salva () {
  47.         FileOutputStream memoria=null;
  48.                 ObjectOutputStream oggetto=null;
  49.         try {
  50.                 memoria = new FileOutputStream(fileName);
  51.         oggetto= new ObjectOutputStream(memoria);
  52.         oggetto.writeObject(a);
  53.         System.out.println("archivio aggiornato!");
  54.         }
  55.         catch (FileNotFoundException e) {
  56.         System.out.println("Attenzione! Errore nel caricamento dei dati, si prega di riprovare");
  57.         System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
  58.         } catch (IOException e) {
  59.         System.out.println("Errore di lettura nel caricamento del file.");
  60.         System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
  61.         } catch (Exception e) {
  62.         System.out.println("Errore generico nel caricamento del file.");
  63.         System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
  64.         }
  65.         finally {
  66.         try {
  67.         if (oggetto != null) oggetto.close();
  68.         if(memoria!=null) memoria.close();
  69.         }
  70.         catch (IOException e) {
  71.         System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
  72.         }
  73.         }
  74.         }
  75.         public void caricamento() {
  76.                 FileInputStream file=null;
  77.                 ObjectInputStream contenuto=null;
  78.                 try {
  79.                 file=new FileInputStream(fileName);
  80.                 contenuto=new ObjectInputStream(file);
  81.                 a=(Artista)contenuto.readObject();
  82.                 }
  83.                 catch (FileNotFoundException e){
  84.                          System.out.println("Si è verificato un errore nel caricamento del file, probabilmente il file non esiste");
  85.                      System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
  86.                 } catch (IOException e) {
  87.                      System.out.println("Errore di lettura nel caricamento del file.");
  88.                      System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
  89.  
  90.                 } catch (Exception e) {
  91.                      System.out.println("Errore generico nel caricamento dei dati.");
  92.                      System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
  93.  
  94.                 }
  95.                 finally {
  96.                 try {
  97.                 if(contenuto!=null)contenuto.close();
  98.                 if(file!=null)file.close();
  99.                 }
  100.                 catch (Exception e) {
  101.                 System.out.println("Errore dettagliato: " + e.getMessage());
  102.                     }
  103.                 }
  104.                 }
  105.        
  106.         }
  107. [/CODE]


Seconda classe.
Codice sorgente - presumibilmente Java

  1. [CODE]
  2. package archivio2;
  3. import java.util.Scanner;
  4. import java.io.Serializable;
  5. import java.util.List;
  6. import java.util.ArrayList;
  7. public class DatiArtista implements Serializable {
  8.         private Artista artista= new Artista();
  9.  
  10.         private List <Artista> aList=new ArrayList<Artista>();
  11.         public void setAList(List <Artista> aList) {
  12.                 this.aList=aList;
  13.         }
  14.  
  15.         public List <Artista> getAList() {
  16.                 return aList;
  17.         }
  18.  
  19. Scanner scanner = new Scanner (System.in);
  20. public DatiArtista() {
  21.                        
  22.                 }                      
  23.                                
  24.                 public void creaArtisti () {
  25.  
  26.                 String inserisci =null;
  27.                 int size=aList.size();
  28.  
  29.                 for (int i = 0; i< size; i++) {
  30.                         if(artista != null && i== size) {
  31.                                                 System.out.println("Attenzione! l'archivio risulta pieno");
  32.                                         }
  33.                                         else if (artista == null) {
  34.                                                 aList.add(artista);
  35.                                                 System.out.println("Inserisci nome");
  36.                                    inserisci =scanner.nextLine();
  37.                                 System.out.println("Inserisci cognome");
  38.                                 inserisci = scanner.nextLine();
  39.                                 System.out.println("Inserisci data di nascita.");
  40.                                 inserisci = scanner.nextLine();
  41.                                 System.out.println("Inserisci biografia");
  42.                                 inserisci = scanner.nextLine();
  43.                                
  44.                                 break;
  45.                                
  46.                                 }
  47.                                        
  48.                                         }
  49.  
  50.         }
  51.                                                 private void nuovoArtista() {
  52.                         // TODO Auto-generated method stub
  53.                        
  54.                 }
  55.  
  56.                                                 public void mostraArtisti() {
  57.                                                         int size=aList.size();
  58.  
  59.                                         for (int i = 0; i <size; i++) {
  60.                                                 if (artista != null) {
  61.                                         System.out.println(((Artista) artista).getNome() + " " + ((Artista) artista).getCognome() +" " + ((Artista) artista).getDataDiNascita() +" " + ((Artista) artista).getBiografia());
  62.                                                 }                                                      
  63.                                                                 }
  64.                                 }
  65.  
  66.                                 public void cercaArtista() {
  67.                                         String scelta = null;
  68.                                         String cercaNome;
  69.                                         String cercaCognome;
  70.                                         int trova=0;
  71.                                         System.out.println("Premi n per cercare per nome, oppure c per cercare per cognome");
  72.         scelta = scanner.nextLine();
  73.         while(!scelta.equals("n") && (!scelta.equals("c"))){
  74.                 System.out.println("Attenzione! Carattere non valido! riprova. Digita n per cercare per nome oppure c per cercare il cognome");
  75.                 scelta =scanner.nextLine();
  76.         }
  77.  
  78.         if (scelta.equals("n")) {
  79.  
  80.                 System.out.println("Inserisci il nome da cercare");
  81.         cercaNome = scanner.nextLine();
  82.         int size=aList.size();
  83.  
  84.         for (int i=0;i<size;i++) {
  85.         if (artista == null) {
  86.         continue;
  87.         }
  88.         else if (cercaNome.equalsIgnoreCase(((Artista) artista).getNome())) {
  89.         System.out.println("Risultati trovati " + ((Artista) artista).getNome() +" " + ((Artista) artista).getCognome() +" " + ((Artista) artista).getDataDiNascita() +" " + ((Artista) artista).getBiografia());
  90.         trova ++;
  91.         }
  92.  
  93.         }
  94.                                 }
  95.         if (scelta.equals("c")) {
  96.                 System.out.println("Inserisci il cognome da cercare");
  97.                 cercaCognome = scanner.nextLine();
  98.                 int size=aList.size();
  99.  
  100.                 for (int i=0;i<size;i++) {
  101.                         if (artista == null) {
  102.                                 continue;
  103.                 }
  104.                         if (cercaCognome.equalsIgnoreCase(((Artista) artista).getCognome())) {
  105.                                 System.out.println("Risultati trovati " + ((Artista) artista).getCognome() +" " + ((Artista) artista).getNome() +" " + ((Artista) artista).getDataDiNascita() +" " + ((Artista) artista).getBiografia());
  106.                                 trova ++;
  107.                                 }
  108.                 }
  109.         }
  110.  
  111.         if (trova == 0) {
  112.                 System.out.println("Risultato non trovato!");
  113.         }
  114.         }
  115.         }
  116. [/CODE]


Terza classe.
Codice sorgente - presumibilmente Java

  1. [CODE]
  2. package archivio2;
  3.  
  4. import java.util.Scanner;
  5. import java.io.Serializable;
  6.  
  7. public class ApplicazioneArchivio implements Serializable{
  8.  
  9.        
  10.         public static void main(String[] args) {
  11.                
  12.                                 DatiArtista datiartista = new DatiArtista();
  13.                        
  14.                                         int scelta=0;          
  15.                                         Scanner scanner = new Scanner(System.in);
  16.                                         System.out.println("Benvenuti nell'archivio degli artisti!");
  17.                                         while (scelta>=0) {
  18.                                         System.out.println("Digita 1 per inserire un artista, 2 per visualizzare l'elenco completo degli artisti, 3 per cercare un artista oppure 4 per uscire");
  19.                                         scelta = scanner.nextInt();
  20.                                                                                        
  21.                                                         switch (scelta) {
  22.                                 case 1:
  23.                                         datiartista.creaArtisti();
  24.                                
  25.                                         break;
  26.                                         case 2:
  27.                                          datiartista.mostraArtisti ();
  28.                                 break;
  29.                                          case 3:
  30.                                                  datiartista.cercaArtista();
  31.                                          break;
  32.                                          case 4:
  33.                                                  System.out.println("Ciao e alla prossima!");
  34.                                                  scelta = -1;
  35.                                                  break;
  36.                                                        
  37.                         default:
  38.                                 System.out.println("Inserimento non valido!");
  39.                                 scelta=0;
  40.                                                                                         }
  41.                                                 }
  42.                 }
  43.                 }              
  44.         [/CODE]


Il salvataggio dei file dovrebbe funzionare, ma non so ancora se funziona il caricamento.
Grazie a chi vorrà aiutarmi!

PM Quote
Avatar
krek (Normal User)
Newbie


Messaggi: 2
Iscritto: 21/01/2020

Segnala al moderatore
Postato alle 17:56
Martedì, 21/01/2020
A colpo d'occhio non ti so dire cosa non va. Hai fatto un bel lavorone ma hai mischiato un pò le carte.
A mio parere ti conviene ripartire da zero e riscrivere il codice, di solito è meglio, cercare gli errori, diciamo però che come hai impostato la cosa ti sei complicato la vita (a parer mio).

io inizierei snelleno la classe Artista che deve fare l'artista e per la classe come l'hai definita fa troppe cose.
Lascerei per un momento la logica di salvataggio fuori dal Artista.

Codice sorgente - presumibilmente Java

  1. import java.io.Serializable;
  2.  
  3. public class Artista implements Serializable {
  4.  
  5.   private String nome;
  6.   private String cognome;
  7.   private String dataDiNascita;
  8.   private String biografia;
  9.  
  10.   public Artista(String nome, String cognome, String dataDiNascita, String biografia) {
  11.     this.nome = nome;
  12.     this.cognome = cognome;
  13.     this.dataDiNascita = dataDiNascita;
  14.     this.biografia = biografia;
  15.   }
  16.  
  17.   public String getNome() {
  18.     return nome;
  19.   }
  20.  
  21.   public void setNome(String nome) {
  22.     this.nome = nome;
  23.   }
  24.  
  25.   public String getCognome() {
  26.     return cognome;
  27.   }
  28.  
  29.   public void setCognome(String cognome) {
  30.     this.cognome = cognome;
  31.   }
  32.  
  33.   public String getDataDiNascita() {
  34.     return dataDiNascita;
  35.   }
  36.  
  37.   public void setDataDiNascita(String dataDiNascita) {
  38.     this.dataDiNascita = dataDiNascita;
  39.   }
  40.  
  41.   public String getBiografia() {
  42.     return biografia;
  43.   }
  44.  
  45.   public void setBiografia(String biografia) {
  46.     this.biografia = biografia;
  47.   }
  48.  
  49.   @Override
  50.   public String toString() {
  51.     StringBuilder builder = new StringBuilder();
  52.     builder.append("Artista [nome=");
  53.     builder.append(nome);
  54.     builder.append(", cognome=");
  55.     builder.append(cognome);
  56.     builder.append(", dataDiNascita=");
  57.     builder.append(dataDiNascita);
  58.     builder.append(", biografia=");
  59.     builder.append(biografia);
  60.     builder.append("]");
  61.     return builder.toString();
  62.   }
  63.  
  64. }



Io ci metterei i getter e setter e un override di toString. Appena ho tempo guardo di vedere dov'è son i bug del tuo codice e intanto ti faccio vedere come lo avrei approcciato io.

PM Quote
Avatar
krek (Normal User)
Newbie


Messaggi: 2
Iscritto: 21/01/2020

Segnala al moderatore
Postato alle 16:41
Mercoledì, 22/01/2020
il problema non è nell'uso delle collection ma più che altro non torna molto la logica.


Codice sorgente - presumibilmente Java

  1. public void creaArtisti () {
  2.  
  3.                 String inserisci =null;
  4.                 int size=aList.size();
  5.  
  6.                 for (int i = 0; i< size; i++) {
  7.                         if(artista != null && i== size) {
  8.                                                 System.out.println("Attenzione! l'archivio risulta pieno");
  9.                                         }
  10.                                         else if (artista == null) { ...//...



aList.size() è sempre uguale a  0 (zero) e qunidi size ==0 (==i) è quindi  (l'archivio contiene zero elementi ma è pieno ???).

Oltre a ciò lo scopo è di controllare se c'è spazio in un archivio è quindi controllare che esista un artista (&&) messo così è poco utile.

Al limite

1 - controllo se ho spazio nell'archibio
2 - controllo se ho un'artista (anche se anche può essere organizzato meglio come controllo)

La "semantica" è un pò incasinata.

Forza ciao ciao :)

Ultima modifica effettuata da krek il 22/01/2020 alle 16:44
PM Quote