Oppure

Loading
19/01/20 16:38
Lucym80
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.
[CODE]
package archivio2;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Artista implements Serializable {
    private String nome;
    private String cognome;
    private String dataDiNascita;
    private String biografia;
    public Artista() {
    }

    public String getNome() {
     return nome;
    }
    public void setNome(String nome) {
     this.nome = nome;
    }
    public String getCognome() {
     return cognome;
    }
    public void setCognome(String cognome) {
     this.cognome = cognome;
    }
    public String getDataDiNascita() {
     return dataDiNascita;
    }
    public void setDataDiNascita(String dataDiNascita) {
     this.dataDiNascita = dataDiNascita;
    }
    public String getBiografia() {
     return biografia;
    }
    public void setBiografia(String biografia) {
     this.biografia = biografia;
     }
    String fileName = "applicazione archivio.dat";
Artista a;
public void salva () {
    FileOutputStream memoria=null;
        ObjectOutputStream oggetto=null;
    try {
        memoria = new FileOutputStream(fileName);
    oggetto= new ObjectOutputStream(memoria);
    oggetto.writeObject(a);
    System.out.println("archivio aggiornato!";);
    }
    catch (FileNotFoundException e) {
    System.out.println("Attenzione! Errore nel caricamento dei dati, si prega di riprovare";);
    System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
    } catch (IOException e) {
    System.out.println("Errore di lettura nel caricamento del file.";);
    System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
    } catch (Exception e) {
    System.out.println("Errore generico nel caricamento del file.";);
    System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
    }
    finally {
    try {
    if (oggetto != null) oggetto.close();
    if(memoria!=null) memoria.close();
    }
    catch (IOException e) {
    System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
    }
    }
    }
    public void caricamento() {
        FileInputStream file=null;
        ObjectInputStream contenuto=null;
        try {
        file=new FileInputStream(fileName);
        contenuto=new ObjectInputStream(file);
        a=(Artista)contenuto.readObject();
        }
        catch (FileNotFoundException e){
             System.out.println("Si è verificato un errore nel caricamento del file, probabilmente il file non esiste";);
         System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());
        } catch (IOException e) {
         System.out.println("Errore di lettura nel caricamento del file.";);
         System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());

        } catch (Exception e) {
         System.out.println("Errore generico nel caricamento dei dati.";);
         System.out.println("Ecco i dettagli dell'errore: " + e.getMessage());

        }
        finally {
        try {
        if(contenuto!=null)contenuto.close();
        if(file!=null)file.close();
        }
        catch (Exception e) {
        System.out.println("Errore dettagliato: " + e.getMessage());
         }
        }
        }
    
    }
[/CODE]
Seconda classe.
[CODE]
package archivio2;
import java.util.Scanner;
import java.io.Serializable;
import java.util.List;
import java.util.ArrayList;
public class DatiArtista implements Serializable {
    private Artista artista= new Artista();

    private List <Artista> aList=new ArrayList<Artista>();
    public void setAList(List <Artista> aList) {
        this.aList=aList;
    }

    public List <Artista> getAList() {
        return aList;
    }

Scanner scanner = new Scanner (System.in);
public DatiArtista() {
            
        }            
                
        public void creaArtisti () {

        String inserisci =null;
        int size=aList.size();

        for (int i = 0; i< size; i++) {
            if(artista != null && i== size) {
                        System.out.println("Attenzione! l'archivio risulta pieno";);
                    }
                    else if (artista == null) {
                        aList.add(artista);
                        System.out.println("Inserisci nome";);
                 inserisci =scanner.nextLine();
                System.out.println("Inserisci cognome";);
                inserisci = scanner.nextLine();
                System.out.println("Inserisci data di nascita.";);
                inserisci = scanner.nextLine();
                System.out.println("Inserisci biografia";);
                inserisci = scanner.nextLine();
                
                break;
                
                }
                    
                    }

    }
                        private void nuovoArtista() {
            // TODO Auto-generated method stub
            
        }

                        public void mostraArtisti() {
                            int size=aList.size();

                    for (int i = 0; i <size; i++) {
                        if (artista != null) {
                    System.out.println(((Artista) artista).getNome() + " " + ((Artista) artista).getCognome() +" " + ((Artista) artista).getDataDiNascita() +" " + ((Artista) artista).getBiografia());
                        }                            
                                }
                }

                public void cercaArtista() {
                    String scelta = null;
                    String cercaNome;
                    String cercaCognome;
                    int trova=0;
                    System.out.println("Premi n per cercare per nome, oppure c per cercare per cognome";);
    scelta = scanner.nextLine();
    while(!scelta.equals("n";) && (!scelta.equals("c";))){
        System.out.println("Attenzione! Carattere non valido! riprova. Digita n per cercare per nome oppure c per cercare il cognome";);
        scelta =scanner.nextLine();
    }

    if (scelta.equals("n";)) {

         System.out.println("Inserisci il nome da cercare";);
    cercaNome = scanner.nextLine();
    int size=aList.size();

    for (int i=0;i<size;i++) {
    if (artista == null) {
    continue;
    }
    else if (cercaNome.equalsIgnoreCase(((Artista) artista).getNome())) {
    System.out.println("Risultati trovati " + ((Artista) artista).getNome() +" " + ((Artista) artista).getCognome() +" " + ((Artista) artista).getDataDiNascita() +" " + ((Artista) artista).getBiografia());
    trova ++;
    }

    }
                }
    if (scelta.equals("c";)) {
        System.out.println("Inserisci il cognome da cercare";);
        cercaCognome = scanner.nextLine();
        int size=aList.size();

        for (int i=0;i<size;i++) {
            if (artista == null) {
                continue;
        }
            if (cercaCognome.equalsIgnoreCase(((Artista) artista).getCognome())) {
                System.out.println("Risultati trovati " + ((Artista) artista).getCognome() +" " + ((Artista) artista).getNome() +" " + ((Artista) artista).getDataDiNascita() +" " + ((Artista) artista).getBiografia());
                trova ++;
                }
        }
    }

    if (trova == 0) {
        System.out.println("Risultato non trovato!";);
    }
    }
    }
[/CODE]
Terza classe.
[CODE]
package archivio2;

import java.util.Scanner;
import java.io.Serializable;

public class ApplicazioneArchivio implements Serializable{

    
    public static void main(String[] args) {
        
                 DatiArtista datiartista = new DatiArtista();
             
                     int scelta=0;         
                     Scanner scanner = new Scanner(System.in);
                     System.out.println("Benvenuti nell'archivio degli artisti!";);
                    while (scelta>=0) {
                     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";);
                     scelta = scanner.nextInt();
                                              
                             switch (scelta) {
                case 1:
                    datiartista.creaArtisti();
                
                    break;
                    case 2:
                     datiartista.mostraArtisti ();
                break;
                     case 3:
                         datiartista.cercaArtista();
                     break;
                     case 4:
                         System.out.println("Ciao e alla prossima!";);
                         scelta = -1;
                         break;
                             
            default:
                System.out.println("Inserimento non valido!";);
                scelta=0;
                                             }
                         }
        }
        }        
    [/CODE]
Il salvataggio dei file dovrebbe funzionare, ma non so ancora se funziona il caricamento.
Grazie a chi vorrà aiutarmi!
aaa
21/01/20 16:56
krek
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.

import java.io.Serializable;

public class Artista implements Serializable {

  private String nome;
  private String cognome;
  private String dataDiNascita;
  private String biografia;

  public Artista(String nome, String cognome, String dataDiNascita, String biografia) {
    this.nome = nome;
    this.cognome = cognome;
    this.dataDiNascita = dataDiNascita;
    this.biografia = biografia;
  }

  public String getNome() {
    return nome;
  }

  public void setNome(String nome) {
    this.nome = nome;
  }

  public String getCognome() {
    return cognome;
  }

  public void setCognome(String cognome) {
    this.cognome = cognome;
  }

  public String getDataDiNascita() {
    return dataDiNascita;
  }

  public void setDataDiNascita(String dataDiNascita) {
    this.dataDiNascita = dataDiNascita;
  }

  public String getBiografia() {
    return biografia;
  }

  public void setBiografia(String biografia) {
    this.biografia = biografia;
  }

  @Override
  public String toString() {
    StringBuilder builder = new StringBuilder();
    builder.append("Artista [nome=");
    builder.append(nome);
    builder.append(", cognome=");
    builder.append(cognome);
    builder.append(", dataDiNascita=");
    builder.append(dataDiNascita);
    builder.append(", biografia=");
    builder.append(biografia);
    builder.append("]");
    return builder.toString();
  }
  
}


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.
aaa
22/01/20 15:41
krek
il problema non è nell'uso delle collection ma più che altro non torna molto la logica.



 public void creaArtisti () {
 
                String inserisci =null;
                int size=aList.size();
 
                for (int i = 0; i< size; i++) {
                        if(artista != null && i== size) {
                                                System.out.println("Attenzione! l'archivio risulta pieno");
                                        }
                                        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 22/01/20 15:44
aaa