Domanda Array di oggetti

sara20

Utente Silver
6 Febbraio 2020
116
29
1
54
Buon pomeriggio ho un dubbio su questo esercizio...in pratica devo popolare il vettore Studenti che hanno nome, cognome e Matricola, senza l'utilizzo dell'ArrayList sapete aiutarmi?
Java:
public class CorsoDiLaurea {
    
    //ATTRIBUTI
    public String Nome;
    public String Dipartimento;
    public Studente[] StudentiIscritti;   
    
    
    //COSTRUTTORI
    public CorsoDiLaurea(String nome, String dipartimento) {
        super();
        Nome = nome;
        Dipartimento = dipartimento;
    
    }
    
    
    //METODI
    public void aggStudente (Studente s) {
        String[] StudentiIscritti = {"Marta", "Matteo", "Giovanni", "Melina"};
    for (String i : StudentiIscritti) {
        System.out.println(i);
         }
       }
    
}
 
Dovresti rispettare le convenzioni per i nomi delle variabili.

Quale sarebbe il problema? Devi inserire degli elementi in un array... Quindi dovrai prima allocare N elementi nel tuo array (che sarà statico), e poi chiamare aggStudente().
Conosci il numero degli studenti iscritti?
 
Dovresti rispettare le convenzioni per i nomi delle variabili.

Quale sarebbe il problema? Devi inserire degli elementi in un array... Quindi dovrai prima allocare N elementi nel tuo array (che sarà statico), e poi chiamare aggStudente().
Conosci il numero degli studenti iscritti?
no pero ho provato a fare cosi ma mi da vari errori
Java:
public class Tesi {

    //ATTRIBUTI
    private String Titolo;
    private String Materia;
    private Studente  LoStudente;


       //COSTRUTTORI
public Tesi(String titolo, String materia, Studente loStudente) {
    super();
    Titolo = titolo;
    Materia = materia;
    LoStudente = loStudente;
}

       //METODI

  public String getTitolo() {
    return Titolo;
}

  public void setTitolo(String titolo) {
    Titolo = titolo;
}

  public String getMateria() {
    return Materia;
}

  public void setMateria(String materia) {
    Materia = materia;
}

  public Studente getLoStudente() {
    return LoStudente;
}

  public void setLoStudente(Studente loStudente) {
    LoStudente = loStudente;
}

}

Java:
public class Driver {

    public static void main(String[] args) {
       
        CorsoDiLaurea cdl1= new CorsoDiLaurea("Informatica", "Dieti");
        CorsoDiLaurea cdl2= new CorsoDiLaurea("Ingegneria Automatica", "Dieti");
       
       
        Studente s1 = new Studente("Mario", "Esposito", "N86123",cdl1);
        Studente s2 = new Studente("Marco", "Rossi", "P56743", cdl1);
        Studente s3 = new Studente("Rosa", "Verdi", "W87656",cdl2);


       
        System.out.print("La Studente "+s1.getCognome()+" è iscritto a "+s1.IscrittoA.getNome());
        cdl1.aggStudente(s1);
        cdl1.aggStudente(s2);
        cdl2.aggStudente(s3);

    }
}
Java:
public class CorsoDiLaurea {
   
    //ATTRIBUTI
     private String Nome;
     private String Dipartimento;
     private Studente[] StudentiIscritti;
     private int cont = 0;

   
   
    //COSTRUTTORI

    public CorsoDiLaurea(String nome, String dipartimento) {
            super();
            Nome = nome;
            Dipartimento = dipartimento;
        }


    //METODI
    public void aggStudente (Studente s) {
        if (cont < StudentiIscritti.length) {
            StudentiIscritti[cont] = s;
        cont++;
        }
    }

    public String getNome() {
        return Nome;
    }

    public void setNome(String nome) {
        Nome = nome;
    }

    public String getDipartimento() {
        return Dipartimento;
    }

    public void setDipartimento(String dipartimento) {
        Dipartimento = dipartimento;
    }

    public Studente[] getStudentiIscritti() {
        return StudentiIscritti;
    }

    public void setStudentiIscritti(Studente[] studentiIscritti) {
        StudentiIscritti = studentiIscritti;
    }
       
}

Codice:
public class Studente {

      //ATTRIBUTI
    private String Nome;
    private String Cognome;
    private String Matricola;
   
    public Tesi LaTesi;
   
    public  CorsoDiLaurea IscrittoA;
   
   
      //COSTRUTTORI
    public Studente(String nome, String cognome, String matricola, CorsoDiLaurea iscrittoA) {
        super();
        Nome = nome;
        Cognome = cognome;
        Matricola = matricola;
        IscrittoA = iscrittoA;
    }

      //METODI

    public Tesi getLaTesi() {
        return LaTesi;
    }

    public void setLaTesi(Tesi laTesi) {
        LaTesi = laTesi;
    }

    public String getNome() {
        return Nome;
    }

    public void setNome(String nome) {
        Nome = nome;
    }

    public String getCognome() {
        return Cognome;
    }

    public void setCognome(String cognome) {
        Cognome = cognome;
    }

    public String getMatricola() {
        return Matricola;
    }

    public void setMatricola(String matricola) {
        Matricola = matricola;
    }



}

Mi da questo come errore
La Studente Esposito è iscritto a InformaticaException in thread "main" java.lang.NullPointerException
at CorsoDiLaurea.aggStudente(CorsoDiLaurea.java:23)
at Driver.main(Driver.java:17)
 
E...? Guarda bene l'errore.
StudentiIscritti non è allocato, quindi non puoi richiamare "length" su esso.

Ripeto, usa le convenzioni: le variabili iniziano con la minuscola, non con la maiuscola.

Comunque anche la logica non è affatto chiara. Nel main passi allo Studente il corso di laurea, ma nel CorsoDiLaurea hai un "aggStudente".
Per altro anche qui dovresti rivedere i nomi, invece di "aggStudente", "addStudente".

Cosa chiede la consegna originale?
 
Ultima modifica:
E...? Guarda bene l'errore.
StudentiIscritti non è allocato, quindi non puoi richiamare "length" su esso.

Ripeto, usa le convenzioni: le variabili iniziano con la minuscola, non con la maiuscola.

Comunque anche la logica non è affatto chiara. Nel main passi allo Studente il corso di laurea, ma nel CorsoDiLaurea hai un "aggStudente".
Per altro anche qui dovresti rivedere i nomi, invece di "aggStudente", "addStudente".

Cosa chiede la consegna originale?
Non ho una vera traccia devo solo riempire l'array di StudentiIscritti
Messaggio unito automaticamente:

Ma non riesco a capire come collego l'array di studenti iscritti
Java:
public class Driver {

    public static void main(String[] args) {
        
        CorsoDiLaurea cdl1= new CorsoDiLaurea("Informatica", "Dieti",100);
        CorsoDiLaurea cdl2= new CorsoDiLaurea("Ingegneria Automatica","Dieti",100);
        
        Studente s1 = new Studente("Mario", "Esposito", "N86123",cdl1);
        Studente s2 = new Studente("Marco", "Rossi", "P56743", cdl1);
        Studente s3 = new Studente("Rosa", "Verdi", "W87656",cdl2);

        
        cdl1.addStudente(s1);
        cdl1.addStudente(s2);
        cdl2.addStudente(s3);
        
        System.out.print("Lo Studente "+s2.getCognome()+" "+s2.getNome()+" con matricola "+s2.getMatricola()+" è iscritto al corso di "+cdl1.getNomeCorso()+" del dipartimento del "+cdl1.getDipartimento());


    }
}

Java:
public class CorsoDiLaurea {
   
    //ATTRIBUTI
     private String NomeCorso;
     private String Dipartimento;
     private Studente[] studentiIscritti;
     private int cont = 0;
   
   
    //COSTRUTTORI
     public CorsoDiLaurea(String nomeCorso, String dipartimento, int m) {
            super();
            NomeCorso = nomeCorso;
            Dipartimento = dipartimento;
            studentiIscritti = new Studente[m];
        }


   
    //METODI
    public void addStudente (Studente s) {
        if (cont < studentiIscritti.length) {
            studentiIscritti[cont] = s;
        cont++;
        }
    }


    public String getNomeCorso() {
        return NomeCorso;
    }


    public void setNomeCorso(String nomeCorso) {
        NomeCorso = nomeCorso;
    }


    public String getDipartimento() {
        return Dipartimento;
    }


    public void setDipartimento(String dipartimento) {
        Dipartimento = dipartimento;
    }


       
}

Java:
public class Studente {

      //ATTRIBUTI
    private String Nome;
    private String Cognome;
    private String Matricola;
   
    public Tesi LaTesi;
   
    public  CorsoDiLaurea IscrittoA;
   
   
      //COSTRUTTORI
    public Studente(String nome, String cognome, String matricola, CorsoDiLaurea iscrittoA) {
        super();
        Nome = nome;
        Cognome = cognome;
        Matricola = matricola;
        IscrittoA = iscrittoA;
    }

      //METODI

    public Tesi getLaTesi() {
        return LaTesi;
    }

    public void setLaTesi(Tesi laTesi) {
        LaTesi = laTesi;
    }

    public String getNome() {
        return Nome;
    }

    public void setNome(String nome) {
        Nome = nome;
    }

    public String getCognome() {
        return Cognome;
    }

    public void setCognome(String cognome) {
        Cognome = cognome;
    }

    public String getMatricola() {
        return Matricola;
    }

    public void setMatricola(String matricola) {
        Matricola = matricola;
    }



}


Java:
public class Tesi {

    //ATTRIBUTI
    private String Titolo;
    private String Materia;
    private Studente  LoStudente;


       //COSTRUTTORI
public Tesi(String titolo, String materia, Studente loStudente) {
    super();
    Titolo = titolo;
    Materia = materia;
    LoStudente = loStudente;
}

       //METODI

  public String getTitolo() {
    return Titolo;
}

  public void setTitolo(String titolo) {
    Titolo = titolo;
}

  public String getMateria() {
    return Materia;
}

  public void setMateria(String materia) {
    Materia = materia;
}

  public Studente getLoStudente() {
    return LoStudente;
}

  public void setLoStudente(Studente loStudente) {
    LoStudente = loStudente;
}

}
 
Ultima modifica:
Che cosa intendi?
Nel corso di laurea devi avere l'array che memorizza gli Studenti, come stai facendo, nel quale aggiungi gli Studenti tramite l'apposito metodo.
Potrebbe mancarti una gestione logica sui corsi di laurea.
mah "Potrebbe mancarti una gestione logica sui corsi di laurea"non ho capito, in che senso, puoi farmi un esempio?