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

    [JAVA] Creazione di Array di Array

    Salve a tutti, ho da poco cominciato il corso di Java all'universit�, e sto cercando di entrare nel meccanismo della Programmazione a oggetti (perdonate i miei errori ).
    Vi spiego il mio dubbio.

    Ho un esercizio da fare che gestisce il sistema Universit�, con Corsi, Studenti e Docenti.
    Ho creato un array con il codice dei Corsi, e ora vorrei creare per ogni corso, un array di studenti che possono essere aggiunti al corso.
    Ogni codice del corso dovrebbe "puntare" all'array di Studenti del corso stesso.
    Non mi � chiaro chi deve fare cosa, chi deve creare gli oggetti ecc.

    Riporto il punto dove mi sono bloccato.


    " Gli studenti possono essere iscritti agli insegnamenti tramite il metodo register() che riceve come parametro la matricola dello studente ed il codice del corso a cui iscriverlo. "

    codice:
    public class University {
    
    
        public String uniName,recName,recSurname,studName,studSurname,teacherName,titleCourse;
        public int studMatr=10000,corsCode=10;
        private static final int N_MAX_STUD=1000, N_MAX_CORSI=50, N_MAX_ISCRITTI=100;
    
    
        public Studente[] StudVett=new Studente[N_MAX_STUD];
        public Corso[] CourseVett=new Corso[N_MAX_CORSI];
        
        public int matr=0,nCorso=0;
        private int i=0;
        
        
        public int enroll(String first, String last){
            
            StudVett[matr]=new Studente(matr,first,last);
            matr++;
            
            return matr-1+studMatr;
        }
        
        public String student(int id){
            return StudVett[id-studMatr].name +" "+ StudVett[id-studMatr].surname;
            
        }
        
        public int activate(String title, String teacher){
            CourseVett[nCorso]=new Corso(title, teacher);
            nCorso++;
            return nCorso-1+corsCode;
        }
        
        public String course(int code){
            return code +": "+ CourseVett[code-corsCode].title + " " + CourseVett[code-corsCode].teacher;
        }
        
        public void register(int studentID, int courseCode){
    
    
            CourseVett[courseCode]. ???
        
            
    }
    }
    Io passo al metodo register(), matricola e codiceCorso; con il codice corso accedo al vettore Corso[codiceCorso], ma poi cosa devo fare? Il vettore di studenti lo devo creare nella classe Studente o Corso?
    E come e dove devo accedere al vettore Corso[codiceCorso].listaStudenti[]? Nella Classe University?



    codice:
    public class Studente {
    
    
        private static final int N_MAX_C_STUD = 25;
        public String name,surname;
        int matricola,codCorso;
        public Corso[] addCourse=new Corso[N_MAX_C_STUD];
        private int numCorso=0;
        
        public Studente(int matricola,String name, String surname){
            this.name=name;
            this.surname=surname;
            this.matricola=matricola;
        }
    }
    codice:
    public class Corso {
        public String teacher,title;
        private static final int N_MAX_S_CORS = 100;
        public Studente[] listaStudenti=new Studente[N_MAX_S_CORS];
        public int idStudent, corsoCod;
        private int numStud=0;
        
        public Corso(int idStudent, int corsoCod){
            this.idStudent=idStudent;
            this.corsoCod=corsoCod;
        }
        public Corso(String title, String teacher){
            this.title=title;
            this.teacher=teacher;
        }
        
        public void StudentiCorso(int matricola, int corso){
            ???
        }
    }
    Ultima modifica di noob9; 23-03-2017 a 12:08

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Ascolta, ci sono svariate cose che non vanno bene, già a partire dal mancato "incapsulamento" delle variabili di istanza.

    Ma prima del codice, è più importante valutare e decidere le relazioni tra le entità. Un corso deve (logicamente) tenere l'elenco degli studenti che seguono il corso. Ma uno studente deve anche tenere l'elenco dei corsi che segue? Se sì, c'è una connessione bidirezionale tra i due, che va pensata e gestita bene per evitare incoerenze e "loop" fatali.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    6
    Grazie per la risposta. Purtroppo faccio un po di confusione, visto che è il mio primo programma java che scrivo, e provenendo da un anno e mezzo di programmazione C, faccio fatica ad entrare nel meccanismo.

    Le variabili di istanza sono quelle appartenenti alla singola classe, giusto? Avrei dovuto dichiarale come private? E per accedervi poi avrei dovuto creare i metodi getter e setter? (ho preferito dichiararle public per capire, inizialmente, come muovermi in Java)

    Provo a postare il testo dell' esercizio, così è tutto più chiaro:

    Gestione Ateneo
    Progettare ed implementare un programma che possa gestire corsi, docenti e studenti di un ateneo. Tutte le classi deveono appartenere al pacakge university.
    Il programma interagisce attraverso la classe University.
    R1. Ateneo
    La classe principale con cui interagire è University, che riceve come parametro del costruttore il nome dell'ateneo.
    Il nome dell'ateneo è leggibile tramite il metodo getter getName().
    È possibile definire il nome del rettore di un ateneo tramite il metodo setRector() che riceve come parametri nome e cognome del rettore.
    Il metodo getter getRector() restituisce nome e cognome del rettore concatenati con uno spazio (" ") in mezzo.
    R2. Studenti
    È possibile inserire le informazioni relativa ad un nuovo studente tramite il metodo enroll() della classe University, che riceve come parametri il nome ed il cognome dello studente; il metodo reststituisce il numero di matricola che è stato assegnato allo studente.
    I numeri di matricola vengono assegnati, in maniera progressiva per ogni ateneo a partire dal numero 10000.
    Si assuma che ciascun ateneo non possa contenere più di 1000 studenti.
    Per ottenere le informazioni relative ad uno studente si utilizza il metodo student() che riceve come parametro la matricola e restituisce una stringa composta da numero di matricola, nome e cognome separati da spazi.
    R3. Insegnamenti
    Per definire un nuovo insegnamento si utilizza il metodo activate() che riceve come parametri il titolo del corso e il nome del docente titolare. Il metodo restituisce un intero che corrisponde al codice del corso. I codici vengono assegnati progressivamente a partire da 10.
    Si assuma che ciascun ateneo non possa attivare più di 50 insegnamenti.
    Per conoscere le informazioni relative ad un corso si usa il metodo course() che riceve come parametro il codice del corso e resituisce una stringa contenente codice, titolo e titolare del corso.
    R4. Iscritti agli insegnamenti
    Gli studenti possono essere iscritti agli insegnamenti tramite il metodo register() che riceve come parametro la matricola dello studente ed il codice del corso a cui iscriverlo.
    Si assuma che ciascuno studente non possa essere iscritto a più di 25 insegnamenti e che un insegnamento non possa avere più di 100 iscritti.
    Per ottenere l'elenco degli iscritti ad un insegnamento è disponibile il metodo listAttendees() che riceve come parametro il codice dell'insegnamento e restituisce una stringa contenente l'elenco degli studenti iscritti.
    Gli studenti compaiono uno per riga (le righe sono terminate da un a-capo "\n") secondo il formato descritto al punto R2.
    Data la matricola di uno studente, tramite il metodo studyPlan(), è possibile conoscere l'elenco degli insegnamenti a cui è iscritto, gli insegnamenti sono descritti come al punto precedente.



    codice:
    package university;
    
    
    public class University {
    
    
        private String uniName,recName,recSurname,studName,studSurname,teacherName,titleCourse;
        private int studMatr=10000,corsCode=10;
        private static final int N_MAX_STUD=1000, N_MAX_CORSI=50, N_MAX_ISCRITTI=100;
    
    
        public Studente[] StudVett=new Studente[N_MAX_STUD];
        public Corso[] CourseVett=new Corso[N_MAX_CORSI];
    
    
        
        public int matr=0,nCorso=0;
        private int i=0;
        
        
        public University(String name){
            uniName=name;
        }
        
        public String getName(){
            return uniName;
        }
        
        public void setRector(String first, String last){
            recName=first;
            recSurname=last;
        }
        
        public String getRector(){
        
            return  recName + " " + recSurname;
        }
        
        public int enroll(String first, String last){
            
            StudVett[matr]=new Studente(matr,first,last);
            matr++;
            
            return matr-1+studMatr;
        }
        
        public String student(int id){
            return StudVett[id-studMatr].name +" "+ StudVett[id-studMatr].surname;
            
        }
        
        public int activate(String title, String teacher){
            CourseVett[nCorso]=new Corso(title, teacher);
            nCorso++;
            return nCorso-1+corsCode;
        }
        
        public String course(int code){
            return code +": "+ CourseVett[code-corsCode].title + " " + CourseVett[code-corsCode].teacher;
        }
        
        public void register(int studentID, int courseCode){
    
    
            CourseVett[courseCode].addStudent[]= new Studente(studentID);
        
            
        }
        
        public String listAttendees(int courseCode){
            //TODO: to be implemented
            return null;
        }
    
    
        public String studyPlan(int studentID){
            //TODO: to be implemented
            return null;
        }
    }


    codice:
    package university;
    
    
    public class Studente {
    
    
        private static final int N_MAX_C_STUD = 25;
        private String name,surname;
        private int matricola,codCorso;
        private Corso[] addCourse=new Corso[N_MAX_C_STUD];
        private int numCorso=0;
        
        public Studente(int matricola,String name, String surname){
            this.name=name;
            this.surname=surname;
            this.matricola=matricola;
        }
    
    
        public Studente(int matricola){
            this.matricola=matricola;
        }
        public void CourseStudent(int matricola, int codCorso){
            
        }
        
        
    }


    codice:
    package university;
    
    
    public class Corso {
        private String teacher,title;
        private static final int N_MAX_S_CORS = 100;
        private Studente[] addStudent=new Studente[N_MAX_S_CORS];
        private int idStudent, corsoCod;
        private int numStud=0;
        
        public Corso(int idStudent, int corsoCod){
            this.idStudent=idStudent;
            this.corsoCod=corsoCod;
        }
        public Corso(String title, String teacher){
            this.title=title;
            this.teacher=teacher;
        }
        
        public void StudentiCorso(int matricola, int corso){
            numStud++;
        }
    }


    Credo che i primi tre punti, più o meno, vanno abbastanza bene.
    Ora dovrei creare questi array, il primo, quello dei corsi, che contenga la lista degli studenti iscritti;
    Il secondo, quello degli studenti, che contenga una lista dei corsi a cui ogni studente è iscritto.


    Grazie mille per la pazienza

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Non ho letto tutto tutto in modo approfondito ma ad occhio .... ci sono comunque (troppe) cose che non vanno.

    Tanto per dirne qualcuna:

    Innanzitutto una forma del tipo:

    CourseVett[courseCode].addStudent[]= new Studente(studentID);

    è totalmente insensata.

    Poi comunque, tecnicamente, CourseVett è un array di oggetti Corso ..... e tu in un elemento dell'array ci assegneresti un oggetto Studente?? Non ha proprio senso.

    Poi, altra cosa, il testo dice "Il metodo restituisce un intero che corrisponde al codice del corso. I codici vengono assegnati progressivamente a partire da 10".

    Quindi CourseVett[courseCode] non va bene. I codici partono da 10 ma a te serve indirizzare nell'array a partire dall'indice 0, non da 10. A meno di voler "sprecare" 10 posizioni iniziali vuote (e allungando l'array di 10) ma: a) è molto brutta come soluzione e b) non è sicuramente quanto ci si aspetta. Quindi o scali di 10 per ottenere un indice "zero based" oppure trovi un'altra soluzione.


    Quote Originariamente inviata da noob9 Visualizza il messaggio
    visto che è il mio primo programma java che scrivo
    Se questo è davvero il tuo primo programma Java, allora è un problema .... un grosso problema.
    Perché in teoria avresti dovuto già fare svariati esercizi molto più semplici PRIMA di arrivare a questo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    6
    È il primo esercizio in assoluto che ci hanno assegnato da svolgere in laboratorio, e mi sta soltanto confondendo le idee .
    A questo punto penso sia meglio fare per conto mio cose più semplici, per capire i meccanismi base, e poi cercare di risolvere l'esercizio.

    Grazie mille del tempo e della pazienza

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