Visualizzazione dei risultati da 1 a 9 su 9

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12

    Aiuto importante array di oggetti

    Ciao a tutti, ho cominciato da poco a studiare java come autodidatta (quindi in caso ci siano brutti errori sul codice siate gentili please )
    Ho trovato questo esercizio che mi sta facendo diventare matto: creare una simulazione di un ufficio. praticamente devo creare una classe astratta che contenga in private name, surname ed age più i metodi get e set per ognuno di loro e il metodo getToWork. Poi una classe "uomo" che erediti il tutto e che crei 4 persone al suo interno e infine la classe ufficio con un array dei dipendenti della classe uomo che tramite un for attivi su ogni dipendente il metodo getToWork. Non riesco a farlo funzionare, quando non mi da errore, stampa sempre 4 null
    Cosa posso fare?


    ecco il codice di Ufficio
    codice:
    public class Ufficio {
            public static void main (String [] args){    
            
             Uomo [] employees = new Uomo[3];
            
             for(int i=0; i<employees.length; i++){
                 
                 employees[i].getToWork();
                 }    
        }    
        }


    il codice di PersonaAstratta
    codice:
    public abstract class PersonaAstratta {
    
        private String name;
        private String surname;
        private int age;
        
        public abstract void getToWork();
        
        public String getName(){
        return name;    
       }
        public void setName (String name){
        this.name = name;    
      }
        public String getSurname(){
            return surname;    
           }
            public void setSurname (String surname){
            this.surname = surname;    
          }
            public int getAge(){
                return age;    
               }
                public void setAge (int age){
                this.age = age;    
              }


    }

    e infine il codice di Uomo
    codice:
    public class Uomo extends PersonaAstratta {
        public String sex="male";
        
        public  void getToWork(){
            System.out.println("Working");
        }
        
        
        
        
         Uomo luca = new Uomo();{
             luca.setName("Luca");
         }
         
         Uomo giorgio = new Uomo();{
             giorgio.setName("Giorgio");
    }
         Uomo gianni = new Uomo();{
             gianni.setName("Gianni");
         }
         Uomo mario = new Uomo();{
             mario.setName("mario");
         }
    
    }

    Grazie in anticipo per il vostro aiuto e di nuovo, siate gentili in caso avessi fatto erroracci

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Il problema è che la riga:

    codice:
    Uomo[] employees=new Uomo[3];
    Crea soltanto un vettore di oggetti di tipo Uomo, di lunghezza tre.
    Dopo questa istruzione hai un vettore che all'interno contiene tre valori null.
    Devi istanziare ognuno di quei tre valori, anche con un ciclo for.

    Dopo avere istanziato ogni Uomo, potrai richiamare il metodo getToWork() su di esso senza ottenere un errore.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    Il problema è che la riga:

    codice:
    Uomo[] employees=new Uomo[3];
    Crea soltanto un vettore di oggetti di tipo Uomo, di lunghezza tre.
    Dopo questa istruzione hai un vettore che all'interno contiene tre valori null.
    Devi istanziare ognuno di quei tre valori, anche con un ciclo for.

    Dopo avere istanziato ogni Uomo, potrai richiamare il metodo getToWork() su di esso senza ottenere un errore.
    Per istanziarlo dovrei fare
    codice:
    employees[0]= luca;
    employyes[1]= giorgio;

    e così via? Perchè l'ho provato e non funziona

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quando istanzi un array con

    codice:
    Uomo [] employees = new Uomo[3];
    Questo istanzia solo l'array in sé (che è un oggetto). Ma non istanzia in automatico gli oggetti contenuti (nel tuo caso 3 oggetti Uomo). Questi li devi istanziare tu!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Quando istanzi un array con

    codice:
    Uomo [] employees = new Uomo[3];
    Questo istanzia solo l'array in sé (che è un oggetto). Ma non istanzia in automatico gli oggetti contenuti (nel tuo caso 3 oggetti Uomo). Questi li devi istanziare tu!
    Per istanziarlo dovrei fare
    codice:
    employees[0]= luca;
    employyes[1] = giorgio;
    e così via?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da luca125 Visualizza il messaggio
    Per istanziarlo dovrei fare
    codice:
    employees[0]= luca;
    employyes[1] = giorgio;
    e così via?
    All'interno della classe Ufficio, dove tu crei l'array, le variabili luca,giorgio, etc. non sono definite, quindi riceveresti un errore in compilazione.

    A me pare piuttosto strano che tu debba definire i quattro oggetti di tipo Uomo all'interno della stessa classe Uomo, la cosa di solito viene evitata.
    E' molto più sensato avere all'interno di Uomo un costruttore così definito:

    codice:
    public Uomo(String name){
        this.name=name;
    }
    E perciò nella classe Ufficio ti basterebbe fare:

    codice:
    employees[0]=new Uomo("Luca");
    Ovviamente nel costruttore di Uomo, se segui questo approccio, puoi passare tutte le informazioni che vuoi

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    All'interno della classe Ufficio, dove tu crei l'array, le variabili luca,giorgio, etc. non sono definite, quindi riceveresti un errore in compilazione.

    A me pare piuttosto strano che tu debba definire i quattro oggetti di tipo Uomo all'interno della stessa classe Uomo, la cosa di solito viene evitata.
    E' molto più sensato avere all'interno di Uomo un costruttore così definito:

    codice:
    public Uomo(String name){
        this.name=name;
    }
    E perciò nella classe Ufficio ti basterebbe fare:

    codice:
    employees[0]=new Uomo("Luca");
    Ovviamente nel costruttore di Uomo, se segui questo approccio, puoi passare tutte le informazioni che vuoi
    Oh scusami non avevo aggiornato e mi sono perso la tua risposta :asd:

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2016
    Messaggi
    12
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    All'interno della classe Ufficio, dove tu crei l'array, le variabili luca,giorgio, etc. non sono definite, quindi riceveresti un errore in compilazione.

    A me pare piuttosto strano che tu debba definire i quattro oggetti di tipo Uomo all'interno della stessa classe Uomo, la cosa di solito viene evitata.
    E' molto più sensato avere all'interno di Uomo un costruttore così definito:

    codice:
    public Uomo(String name){
        this.name=name;
    }
    E perciò nella classe Ufficio ti basterebbe fare:

    codice:
    employees[0]=new Uomo("Luca");
    Ovviamente nel costruttore di Uomo, se segui questo approccio, puoi passare tutte le informazioni che vuoi
    Grazie, ho seguito il tuo consiglio e finalmente funziona!

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da luca125 Visualizza il messaggio
    Grazie, ho seguito il tuo consiglio e finalmente funziona!
    Per così poco

    A meno che non fosse nella consegna allora io ti consiglierei di togliere quei quattro oggetti Uomo che definisci nella stessa classe.
    Poi scegli quali parametri passare al costruttore di Uomo , potresti aggiungere surname e anche age (se nel tuo contesto ha senso che un uomo venga "creato" con un'età, ad esempio per l'azienda l'Uomo potrebbe "iniziare ad esistere" solo quando comincia a lavorare o invia il curriculum).

    Poi ti consiglierei di mantenere anche la variabile sex come private, quindi dovresti aggiungere anche un metodo getSex all'interno di uomo. E se il sesso non può cambiare (visto che la classe è chiamata Uomo ha abbastanza senso che non cambi), eviti di inserire il metodo setSex, e il campo sex potrebbe essere dichiarato final.

    Sono tutte questioni di logica più che di programmazione, ma si cerca sempre di mantenere i due aspetti il più possibile legati

Tag per questa discussione

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 © 2025 vBulletin Solutions, Inc. All rights reserved.