Array di oggetti

di il
4 risposte

Array di oggetti

Salve a tutti, vi propongo questo programma di prova dove crea un array di oggetti e 3 oggetti. Vorrei inserire questi 3 oggetti all'interno dell'array con un ciclo for e poi stampare gli attributi di tutti e 3 gli oggetti(nome e numero). Però quando lo vado a fare mi si sovrascrivono gli oggetti e tutte e 3 le posizioni dell' array sono occupate dal terzo oggetto. Come devo fare per mettere ad ogni posizione un oggetto ad esempio alla posizione 1 l' oggetto pr1 alla posizione 2 l'oggetto 2 ecc. Ecco il codice grazie in anticipo
public class prova
{
    static String nome;
    static int num,i;
    
    public prova(String nome,int num){
    this.nome=nome;
    this.num=num;}
    
    public static void main(String[] args){
    prova[] p=new prova[3];
    prova pr=new prova("prova1",1);
    prova pr2=new prova("prova2",2);
    prova pr3=new prova("prova3",3);
    for(i=0;i<3;i++)
    {
        p[i]=pr;
        p[i]=pr2;
        p[i]=pr3;
        System.out.println(p[i].nome);
        System.out.println(p[i].num);
    }}}

4 Risposte

  • Re: Array di oggetti

    Beh, guarda cosa fai NEL ciclo:

    p=pr;
    p=pr2;
    p=pr3;

    il che vuol dire che solo l'ultima delle tre assegnazioni ha effetto.
    E quindi tutti gli elementi avranno .... pr3 !
  • Re: Array di oggetti

    Si si l ho capito però non capisco come posso modificarlo in modo che non si vada a sovrascrivere
  • Re: Array di oggetti

    lorenzorl ha scritto:


    Si si l ho capito però non capisco come posso modificarlo in modo che non si vada a sovrascrivere
    Vanno assegnati nell'array fuori (prima) del ciclo.
  • Re: Array di oggetti

    lorenzorl ha scritto:


    [...] Come devo fare per mettere ad ogni posizione un oggetto ad esempio alla posizione 1 l' oggetto pr1 alla posizione 2 l'oggetto 2 ecc.
    Oltre a non dover sovrascrivere gli oggetti, come ti è già stato detto, potresti crearli direttamente all'interno del ciclo.
    Questo se quello che intendevi fare è creare un vettore di n elementi, e avere in ogni posizione un tuo oggetto Prova (bada l'iniziale, per convenzione i nomi delle classi in java dovrebbero cominciare con una lettera maiuscola) a cui passi un valore crescente tramite il costruttore. Ad esempio :
    
    Prova prove = new Prova[10];
    for(int i=0;  i<prove.length; i++) prove[i] = new Prova(i);
    
    In questo modo stai passando il valore di i ad ogni nuovo oggetto, quindi si incrementa in automatico (nel ciclo parti da 0, che è la posizione iniziale dell'array, se vuoi passare valori ai costruttori a partire da 1 come nel tuo esempio basta passare i+1).

    Nota che per ora sto passando solo un intero, mentre il tuo costruttore richiede anche una stringa, prova ad inserire correttamente anche il passaggio della stringa nel ciclo, è banale.
    Spero di non aver frainteso quello che volevi fare
Devi accedere o registrarti per scrivere nel forum
4 risposte