Sempre sui Generics

di il
33 risposte

33 Risposte - Pagina 2

  • Re: Sempre sui Generics

    Mi dispiace ma non ci arrivo .
    Riesco solo a scrivere quanto segue .
    Sono sicuro che non e' difficile ma proprio non riesco a capire il problema.


    public class Persone {
    private String[] nomi;

    public Persone() { // <---------------- DA USARE
    this.nomi = new String[3];
    }

    String[] getNomi() {
    return nomi;
    }

    void setNomi(String[] nomi) {
    this.nomi = nomi;
    }



    public int contaOmonimiDi(String nome) { // <---------------- DA TESTARE
    // metodo da scrivere
    }

    public void aggiungiNome(int indice, String nome) { // <---------------- DA USARE
    this.nomi[indice] = nome;
    }

    }
  • Re: Sempre sui Generics

    Non devi aggiungere qualcosa a Persone .... se non è richiesto esplicitamente.

    Hai un costruttore che permette di creare un oggetto Persone con n nomi. E hai un metodo aggiungiNome che permette di impostare un nome (ad una posizione).
    Queste cose le DEVI usare nel metodo di test. Fai "finta" che il metodo di test sia un main() classico. Come useresti la classe Persone?

    Appunto .... con l'unica differenza che il risultato di contaOmonimiDi NON lo devi poi stampare all'utente o usare in altro modo ma testare con il assertEquals. Perché stai facendo un test AUTOMATIZZATO ... non un programma interattivo verso l'utente!
  • Re: Sempre sui Generics

    Pensando a come si scrive nel main ho pensato di scrivere qulcosa del genere .
    E' chiaro che alla fine si deve aggiungere l'assert

    import static org.junit.Assert.*;
    import org.junit.Test;

    public void verificaContaOmonimiDiConNomeDuplicato()
    {

    nomi = new String[3];

    nomi.setElemento(1);
    nomi.setElemento(2);
    nomi.setElemento(3);


    }
  • Re: Sempre sui Generics

    FabioJ ha scritto:


    Pensando a come si scrive nel main ho pensato di scrivere qulcosa del genere .
    No, devi usare Persone, non un tuo array. E comunque quello che hai scritto non ha nemmeno senso, gli array non hanno di certo un setElemento.

    Ripeto:

    - hai una classe Persone (già esistente, con il contaOmonimiDi da completare; metti pure una implementazione "farlocca", fasulla, NON importa ora)
    - essa ha un costruttore Persone(int n), lo devi usare per costruire l'oggetto
    - essa ha anche un aggiungiNome(int indice, String nome) e questo lo devi usare per inserire i valori
    - quindi andrai a testare che contaOmonimiDi dia il risultato aspettato

    (rivedi i due scenari a) e b) che dicevo prima, da fare in DUE metodi di test separati)
  • Re: Sempre sui Generics

    Help.....Non ci arrivo ..
  • Re: Sempre sui Generics

    FabioJ ha scritto:


    Help.....Non ci arrivo ..
    Ok, dimentica per un pochino i test, JUnit, ecc...
    Hai una classe Persone (quella che hai mostrato fin dall'inizio). Inizia con il fare un'altra classe es. ProvaPersone con il classico public static void main(String[] args)
    Nel main costruisci un oggetto Persone, usa il aggiungiNome più volte quanto basta/serve e poi usa il contaOmonimiDi.

    Più di così non saprei come aiutarti... se non scrivendoti io le cose ...
  • Re: Sempre sui Generics

    Buongiorno Andbin .
    Rispondo solo adesso perche' ho avuto degli impegni

    Rispondo a questa domanda :

    Inizia con il fare un'altra classe es. ProvaPersone con il classico public static void main(String[] args)

    public class ProvaPersone {

    public static void main(String[] args) {

    Persona nomi [] = new Persona[10];

    String[] nomi_1 = {"Franceso","Mario","Gianni"};
    String[] nomi_2 = {"Ginni","Mario","Gianni"};
    String[] nomi_3 = {"Franco","Mario","Luca"};
    }

    }

    Ho diffolta' ad eseguire il passggio successivo della tua domanda:

    Nel main costruisci un oggetto Persone, usa il aggiungiNome più volte quanto basta/serve e poi usa il contaOmonimiDi.


    Come si fa ad inserire questi due metodi nel main ? ( Questo e' il nodo da sciogliere )

    public int contaOmonimiDi(String nome) { // <---------------- DA TESTARE
    // metodo da scrivere
    }

    public void aggiungiNome(int indice, String nome) { // <---------------- DA USARE
    this.nomi[indice] = nome;
  • Re: Sempre sui Generics

    FabioJ ha scritto:


    public class ProvaPersone {

    public static void main(String[] args) {

    Persona nomi [] = new Persona[10];

    String[] nomi_1 = {"Franceso","Mario","Gianni"};
    String[] nomi_2 = {"Ginni","Mario","Gianni"};
    String[] nomi_3 = {"Franco","Mario","Luca"};
    }

    }
    Non c'è nulla che ha senso. Non servono array. La classe che hai è Persone, non Persona ed è quella che tu hai postato qui:
    https://www.iprogrammatori.it/forum-programmazione/java/sempre-sui-generics-t32015.html#p8580802

    Davvero non riesci a seguire quella classe??
  • Re: Sempre sui Generics

    Non capisco perché in questa classe Persone c'e' un array di stringhe chiamato nomi.

    private String[] nomi;

    Non dovrebbe essere un array di n oggetti chiamati nomi ?



    public class Persone {
    private String[] nomi;
    public Persone(int n) {
    this.nomi = new String[n];
    }
    public int contaOmonimiDi(String nome) {
    // metodo da scrivere
    }
    public void aggiungiNome(int indice, String nome){
    this.nomi[indice] = nome;
    }
    }
  • Re: Sempre sui Generics

    FabioJ ha scritto:


    Non capisco perché in questa classe Persone c'e' un array di stringhe chiamato nomi.

    private String[] nomi;
    Perché è stata fatta così (da chi non ho idea) per rappresentare un "elenco" di n persone descritte solamente dal nome in String.

    FabioJ ha scritto:


    Non dovrebbe essere un array di n oggetti chiamati nomi ?
    Se ci fosse stata una classe Persona e poi se Persone avesse avuto un

    private Persona[] persone;

    Sarebbe stato UN ALTRO "design". Ma se è stata fatta in quel modo .... ehm.. segui e usa quell'approccio!
  • Re: Sempre sui Generics

    Quello che mi manda in tilt e' proprio questo private String[] nomi;
    Se era scritto private String nome ; lo avrei capito ma String[] nomi; , la mia mente lo rifiuta .
    Posso stare giorni a ragionare su questo punto ma so di non venirne a capo. Per me quelle due quadre significano Array .
    Sono andato in confusione.
  • Re: Sempre sui Generics

    FabioJ ha scritto:


    Per me quelle due quadre significano Array .
    Sì ... appunto È un array. E allora .. quale è il dubbio?
    L'array viene istanziato dal costruttore, a fronte del numero di elementi ricevuto in argomento. E il aggiungiNome permette di impostare 1 nome ad una posizione.

    Quindi?
  • Re: Sempre sui Generics

    E' un array di n oggetti chiamati nomi ...Giusto ?

    this.nomi = new String[n]; si in stanziano n celle di memoria chiamate nomi .. Giusto ?


    E il aggiungiNome permette di impostare 1 nome ad una posizione.

    E' come se fosse una map < int, String > Giusto ?
  • Re: Sempre sui Generics

    FabioJ ha scritto:


    E' un array di n oggetti chiamati nomi ...Giusto ?
    Sì, oggetti di tipo String

    FabioJ ha scritto:


    this.nomi = new String[n]; si in stanziano n celle di memoria chiamate nomi .. Giusto ?
    Detto male. Si istanzia un array di n elementi e lo si assegna ad una variabile chiamata nomi.

    FabioJ ha scritto:


    E il aggiungiNome permette di impostare 1 nome ad una posizione.

    E' come se fosse una map < int, String > Giusto ?
    Se vuoi vederlo (molto "idealmente") cosi per semplicità, sì. Ma ovviamente NON è una mappa. E' un array, una sequenza di lunghezza prefissata di valori indirizzabili per indice.


    Quindi: dopo n-mila discussioni sull'argomento ... riesci a fare un main() dove crei un oggetto Persone (es. 3 nomi), usi aggiungiNome quanto basta/serve e poi invochi contaOmonimiDi e ne stampi il risultato??? (metti in contaOmonimiDi un return di un valore fasullo, NON è importante ora).
  • Re: Sempre sui Generics

    Ha senso scrivere cosi come primo passo ?

    public class ProvaPersone {

    public static void main(String[] args) {

    Persone nome;
    String[] nome = {"Mario","Giovanni" , "Pippo" };

    }

    }
Devi accedere o registrarti per scrivere nel forum
33 risposte