Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2019
    Messaggi
    26

    Inserimento elementi in un array.

    Salve a tutti, sto sempre continuando con il mio corso in java e devo costruire un archivio dove l'utente inserisce nome, cognome, data di nascita e biografia di vari artisti.
    Pian piano sono riuscita in parte a realizzarlo, ma avrei bisogno di capire alcune cose.
    1. Come faccio a far si che il secondo artista che l'utente inserisce si vada ad aggiungere nell'array e non sovrascriva quello già inserito?
    2. Volevo chiedervi anche come cambiare il formato della data, poiché quello da me inserito non mi permette di scrivere la data tipo 27/09/1990.
    3. In fine se voglio ad esempio che premendo la lettera e si cancella un elemento come fare?
    Mi scuso delle tante domande e vi ringrazio anticipatamente!
    Queste sono le classi.
    classe 1.
    codice:
    package EserciziJava.esercizio2;
    
    
    public class Artista {
    private String nome;
    private String cognome;
    private int dataDiNascita;
    private String 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 int getDataDiNascita() {
    	return dataDiNascita;
    }
    public void setDataDiNascita(int dataDiNascita) {
    	this.dataDiNascita = dataDiNascita;
    }
    public String getBiografia() {
    	return biografia;
    }
    public void setBiografia(String biografia) {
    	this.biografia = biografia;
    }
    Classe 2.
    codice:
    package EserciziJava.esercizio2;
    import java.util.Scanner;
    public class DatiArtista {
    Artista [] artista = new Artista[100];
    Scanner scanner =new Scanner(System.in);
    String stringa ="";
    public String creaArtisti(String stringa) {
    int i =0;
    		while(stringa.equals("a")){
    if (i<100) {
    				artista[i] = new Artista();
    				
    			System.out.println("Inserisci nome");
    			String nome = scanner.nextLine();
    			artista[i].setNome(nome);
    			
    			System.out.println("Inserisci cognome");
    			String cognome = scanner.nextLine();
    			artista[i].setCognome(cognome);
    
    
    			System.out.println("Inserisci data di nascita.");
    			String nascita = scanner.nextLine();
    			int data = Integer.parseInt(nascita);			
    			artista[i].setDataDiNascita(data);
    System.out.println("Inserisci biografia");
    			String biografia = scanner.nextLine();
    			artista[i].setBiografia(biografia);
    i++;
    System.out.println("Digita a per continuare a inserire gli artisti, b per visualizzare tutti gli artisti, oppure x per chiudere");
    stringa = scanner.nextLine();		
    }
    else {
    
    
    	System.out.println("Attenzione! L'archivio risulta pieno!");
    }
    }
    		while(stringa.equals("b")){
    			for (int y=0; y<100; y++) {
    
    
    					if (artista[i] == null) {
    						continue;
    					}
    					else {
    						System.out.println(artista[y].getNome());
    						System.out.println(artista[y].getCognome());
    					System.out.println(artista[y].getDataDiNascita());
    		System.out.println(artista[y].getBiografia());
    }
    			}
    							return stringa;
    }
    		return stringa;}
    }
    
    }
    Classe 3.
    codice:
    package EserciziJava.esercizio2;
    import java.util.Scanner;
    public class ApplicazioneArchivio {    
     	public static void main(String args[] ) {
    			DatiArtista datiartista = new DatiArtista();
    		Scanner scanner = new Scanner(System.in);
    		String stringa ="";
    		System.out.println("Benvenuto nell'archivio dove puoi inserire tutti i dettagli dei tuoi artisti preferiti. Digita a per inserire gli artisti, b per visualizzare tutti gli artisti inseriti x se vuoi terminare il programma");
    		stringa = scanner.nextLine();
    		while(!stringa.equals("x")){
    		stringa =datiartista.creaArtisti(stringa);
    		}
    		if(stringa.equals("x")){
    			System.out.println("Ciao e alla prossima!");
    		}					
    		}
    	}
    Ancora grazie!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    1. Come faccio a far si che il secondo artista che l'utente inserisce si vada ad aggiungere nell'array e non sovrascriva quello già inserito?
    Un problema di "design" è che l'indice i che usi per indirizzare nell'array è LOCALE all'interno del creaArtisti. Questo vuol dire che se dal main invochi in ciclo più volte il creaArtisti .... semplicemente l'indice riparte ogni volta da zero!
    Lo risolvi modificando il design generale (devi rifare un po' di cose) ....

    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    2. Volevo chiedervi anche come cambiare il formato della data, poiché quello da me inserito non mi permette di scrivere la data tipo 27/09/1990.
    Un altro problema è che hai gestito le date come tipo int e questo è molto .. MOLTO scomodo.
    Anche qui, devi cambiare le cose.

    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    3. In fine se voglio ad esempio che premendo la lettera e si cancella un elemento come fare?
    Dovrai, presumibilmente, chiedere all'utente quale artista vuole eliminare, andarlo a cercare e poi rimuovere l'oggetto dall'array (vuol dire spostare correttamente indietro tutti gli elementi successivi).

    Ripeto la questione principale: il problema di tutto il codice è il design sbagliato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2019
    Messaggi
    26
    Salve, ok grazie: siccome sono all’inizio, mi faresti un esempio della sintassi di come scrivere il tutto? Grazie!

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    Salve, ok grazie: siccome sono all’inizio, mi faresti un esempio della sintassi di come scrivere il tutto? Grazie!
    La classe Artista grosso modo va bene come struttura e concetto. A parte la questione della data, che potresti usare il "vecchio" java.util.Date o il nuovo (da Java 8) java.time.LocalDate ... dipende da cosa conosci o da cosa vuoi affrontare.

    Quello che non va bene è la classe DatiArtista perché rappresenta un mix di gestione dell'array, input/output verso l'utente, parsing ecc...
    Dovresti fare una classe che si occupa di gestire SOLO l'array dal punto di vista "logico". In pratica una classe che incapsula l'array (più altro eventuale) e offre i metodi "logici" per gestire l'array: inserire un artista, sapere quanti artisti ci sono, estrarre l'artista i-esimo, cercare gli artisti es. per nome, ecc...
    In questa classe NON ci dovrebbe essere altro, nel senso che non dovresti fare input/output verso l'utente, niente System.out.println, niente Scanner o che altro. Solo la gestione dell'insieme di artisti.

    Prova a pensarci, per dubbi chiedi (potrei anche abbozzarti del codice ma è meglio se prima ci pensi tu un attimo ..).
    Ultima modifica di andbin; 16-12-2019 a 11:13
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2019
    Messaggi
    26
    Ciao, questa della data non mi è stata spiegata, mi è stato solo detto che facendo così la data viene vista come String.
    Riguardo al fatto di non inserire i System.out.println, come faccio per gli if? A me è stato detto di costruire un programma in tre classi, siccome so che nel main vanno solo gli elementi per eseguire un programma avevo fatto una classe con le variabili, la seconda con gli if eccetera e la terza con il main.
    Riguardo all'eliminazione di un elemento, mi è stato detto che si possono effettuare controlli e spostarli, ma non so il codice da utilizzare.
    Diciamo che purtroppo so molto in teoria e poco in pratica:
    ecco perché parlavo di esempi di sintassi; se so che posso spostare un elemento dall'array, ma non so che costrutto utilizzare o che comando inserire, come faccio?
    Ecco perché sto andando parecchio in confusione!
    Mille grazie!

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    Ciao, questa della data non mi è stata spiegata, mi è stato solo detto che facendo così la data viene vista come String.
    Nel tuo Artista hai messo un int per la data. E in DatiArtista hai messo un nextLine() e con la stringa fai poi un parseInt() per ottenere il int.
    Ma è proprio tutto questo che non è affatto "buono".

    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    Riguardo al fatto di non inserire i System.out.println, come faccio per gli if? A me è stato detto di costruire un programma in tre classi, siccome so che nel main vanno solo gli elementi per eseguire un programma avevo fatto una classe con le variabili, la seconda con gli if eccetera e la terza con il main.
    Ma puoi benissimo farlo con 3 classi:

    - classe Artista (per "modellare" un artista)
    - classe es. ElencoArtisti (che contiene l'array e i metodi "logici" di gestione, insomma "modella" un insieme di artisti)
    - classe ApplicazioneArchivio (o altro nome che vuoi es. GestioneArtisti) che ha il main(), usa Scanner, usa System.out.println ecc..., visualizza un menù, chiede le scelte all'utente, ecc.... E utilizza un oggetto ElencoArtisti. Invece di fare tutto nel main in modo "statico", crea un oggetto ApplicazioneArchivio e fai partire un metodo di istanza. Così puoi tenere cose in comune tra più metodi.

    Quote Originariamente inviata da Lucym80 Visualizza il messaggio
    Riguardo all'eliminazione di un elemento, mi è stato detto che si possono effettuare controlli e spostarli, ma non so il codice da utilizzare.
    Ci devi appunto "ragionare" tu .... fa parte dell'esercizio.


    Parti da qualcosa di semplice: abbozza la classe ElencoArtisti, con le variabili di "istanza" che servono (devi ragionare: serve l'array e ......) e poi inizia a fare es. un

    public boolean inserisciArtista(Artista artista)

    (torna: true=inserito, false=non c'è più spazio)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.