Esercizio java array

di il
5 risposte

Esercizio java array

Salve ragazzi ho creato un progetto il cui testo chiedeva di implementare l'iscrizione e registrazione a corsi universitari.
Purtroppo nel metodo main non tutto va a buon fine, mi trovo con eccezioni del tipo null pointer exception quindi oggetto che non è stato creato.
Non so più dove sbattere la testa quindi chiedo aiuto a voi.
Ho fatto la classe studente

package progetto_univ;


public class Studente {
    
    private String nome;
    private String cognome;
    private String matricola;
    private Corso corsi[];
    private int []voti;
    private int numeroCorsi;

    public Studente(String nome, String cognome, String matricola) {
        //incamerate da esterno
        this.nome = nome;
        this.cognome = cognome;
        this.matricola = matricola;
        //inizializzate da costruttore
        corsi=new Corso[50];
        voti=new int[50];
        numeroCorsi=0;
    }
    
    public void iscrivi(Corso c){
        corsi[numeroCorsi]=c;
        numeroCorsi++;
        c.iscrizione(this);
        //this è riferimento all'oggetto stesso cioè all'oggetto studente
        //ho fatto l'inscrizione anche nell'array dei corsi
    }
    
    public void registraVoto(Corso c, int voto){
        for(int i=0;i<numeroCorsi;i++){
            if(corsi[i]==c){
                voti[i]=voto;
            }
        }
    }
    
    public String toString(){
        String s= nome+" "+cognome+" "+matricola+" iscritto a "+numeroCorsi+" corsi";
        if(numeroCorsi>0){
            for(int i=0;i<numeroCorsi;i++){
                s=s+"\n-"+corsi[i].getNome()+" con docente "+corsi[i].getDocente()+"."+" Voto: "+voti[i];
            }
        }
        return s;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getCognome() {
        return cognome;
    }

    public void setCognome(String cognome) {
        this.cognome = cognome;
    }

    public String getMatricola() {
        return matricola;
    }

    public void setMatricola(String matricola) {
        this.matricola = matricola;
    }

    public int getNumeroCorsi() {
        return numeroCorsi;
    }

    public void setNumeroCorsi(int numeroCorsi) {
        this.numeroCorsi = numeroCorsi;
    }
    
    public double media(){
        double sommaVoti=0;
        double contaVoti=0;
        for(int i=0;i<numeroCorsi;i++){
            if(voti[i]>0){
                sommaVoti+=voti[i];
                contaVoti++;
            }
        }
        return sommaVoti/contaVoti;
    }
    
    public int getVoto(Corso c){
        //voto che studente ha preso in un certo corso.
        //scorro tutti i corsi e se trovo uguaglianza restituisco il corso
        for(int i=0;i<numeroCorsi;i++){
            if(corsi[i]==c){
                return voti[i];
            }
        }
        return 0;  //studente non iscritto al corso
    }

    public Corso[] getCorsi() {
        return corsi;
    }

    public void setCorsi(Corso[] corsi) {
        this.corsi = corsi;
    }

    public int[] getVoti() {
        return voti;
    }

    public void setVoti(int[] voti) {
        this.voti = voti;
    }
    
}
Poi la classe corso
package progetto_univ;


public class Corso {
    
    private String nome;
    private String docente;
    private Studente[] iscritti;
    private int numeroIscritti;

    public Corso(String nome, String docente) {
        this.nome = nome;
        this.docente = docente;
        iscritti=new Studente[100];
        numeroIscritti=0;
    }

    @Override
    public String toString() {
        String s= "Il corso:" + nome + " ha iscritti "+numeroIscritti+" studenti "+"con il docente:" + docente;
         if(numeroIscritti>0){
            for(int i=0;i<numeroIscritti;i++){
                s=s+"\n-"+iscritti[i].getNome()+" "+iscritti[i].getCognome();
            }
         }
        return s;
    }
    
    public void iscrizione(Studente s){
        iscritti[numeroIscritti]=s;
        numeroIscritti++;
    }

    public String getNome() {
        return nome;
    }

    public String getDocente() {
        return docente;
    }

    public int getNumeroIscritti() {
        return numeroIscritti;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void setDocente(String docente) {
        this.docente = docente;
    }

    public void setNumeroIscritti(int numeroIscritti) {
        this.numeroIscritti = numeroIscritti;
    }
    
    public double media(){
        int sommaVoti=0;
        int contaVoti=0;
        for(int i=0;i<numeroIscritti;i++){
            int voto=iscritti[i].getVoto(this);
            if(voto>0){
                sommaVoti+=voto;
                contaVoti++;
            }
            
        }
        return sommaVoti/contaVoti;
    }

    public Studente[] getIscritti() {
        return iscritti;
    }
}
E questo è il main dove incontro i problemi descritti
package progetto_univ;
import java.util.*;

public class Progetto_univ {

    public static void main(String[] args) {
       
        
        System.out.println("---------------");
        System.out.println("MENU");
        String op=" ";
        Scanner in=new Scanner(System.in);
        Studente []allievi=new Studente[50];
        Corso[]esami=new Corso[50];
        int numStud=0;
        int numesami=0;
        int voto=0;
        
        do{
            System.out.println("Menu");
            System.out.println("1.Inserisci studente");
            System.out.println("2.Inserisci corso universitario");
            System.out.println("3.Iscrivi studente a corso");
            System.out.println("4.Inserisci voto studente");
            System.out.println("5.Stampa media voti dello studente");
            System.out.println("6.Stampa media voti del corso");
            System.out.println("7.Stampa situazione studente");
            System.out.println("8.Stampa iscritti al corso");
            System.out.println("x.Uscita");
            op=in.nextLine();
            if(op.equals("1")){
                System.out.println("Inserisci nome");
                String nome=in.nextLine();
                System.out.println("Inserisci cognome");
                String cognome=in.nextLine();
                System.out.println("Inserisci matricola");
                String matricola=in.nextLine();
                Studente s4=new Studente(nome, cognome, matricola);
                allievi[numStud]=s4;
                numStud++;
            }
            if(op.equals("2")){
                System.out.println("Inserisci nome");
                String nome=in.nextLine();
                System.out.println("Inserisci docente");
                String docente=in.nextLine();
                Corso c4=new Corso(nome,docente);
                esami[numesami]=c4;
                numesami++;
            }
            
            if(op.equals("3")){
                System.out.println("Inserisci nome corso");
                String nome=in.nextLine();
                System.out.println("Inserisci matricola studente");
                String matricola=in.nextLine();
                for(int i=0;i<numesami;i++){
                  if(esami[i].getNome().equals(nome)){
                      for(int j=0;j<numStud;j++){
                          if(allievi[j].getMatricola().equals(matricola)){
                              allievi[j].iscrivi(esami[i]);
                          }
                      }
                  }                   
               }   
            }
            if(op.equals("4")){
                System.out.println("Inserisci nome corso");
                String nome=in.nextLine();
                System.out.println("Inserisci matricola studente");
                String matricola=in.nextLine();
                System.out.println("Inserisci voto studente");
                voto=Integer.parseInt(in.nextLine());
                for(int i=0;i<numesami;i++){
                  if(esami[i].getNome().equals(nome)){
                      for(int j=0;j<numStud;j++){
                          if(allievi[j].getMatricola().equals(matricola)){
                              allievi[j].registraVoto(esami[i], voto);
                          }
                      }
                  } 
               }    
            }
            if(op.equals("5")){
                System.out.println("Inserisci matricola studente");
                String matricola=in.nextLine();
                double m=0;
                int i=0;
                for(i=0;i<allievi[i].getNumeroCorsi();i++){
                  if(allievi[i].getMatricola().equals(matricola)){
                      m=30;
                  }  
               } 
               System.out.println("media dello studente "+allievi[i].getNome()+" "+allievi[i].getCognome()+" vale "+m);
            }
            if(op.equals("6")){
                System.out.println("Inserisci nome corso");
                String nome=in.nextLine();
                double m=0;
                int i=0;
                for(i=0;i<esami[i].getNumeroIscritti();i++){
                  if(esami[i].getNome().equals(nome)){
                      m=30;
                  }  
               } 
               System.out.println("media del corso "+esami[i].getNome()+" con docente "+esami[i].getDocente()+" vale "+m);
            }
            if(op.equals("7")){
                System.out.println("Inserisci matricola studente");
                String matricola=in.nextLine();
                int i=0;
                int v=0;
                for(i=0;i<numStud;i++){
                  if(allievi[i].getMatricola().equals(matricola)){
                      System.out.println("Studente "+allievi[i].getNome()+" "+allievi[i].getCognome());
                      //for(int j=0;j<numesami;j++){
                         //System.out.print(allievi[i].getesami()[allievi[j].getNumeroesami()].getNome());
                          //System.out.println(allievi[i].getVoti()[allievi[j].getNumeroesami()]);
                          allievi[i].toString();
                      //}
                  }  
               } 
        }
        if(op.equals("8")){
                System.out.println("Inserisci nome corso");
                String nome=in.nextLine();
                int i=0;
                int v=0;
                for(i=0;i<numesami;i++){
                  if(esami[i].getNome().equals(nome)){
                      System.out.println("Corso "+esami[i].getNome()+" ha iscritti"+" "+esami[i].getNumeroIscritti()+" persone");
                      System.out.println("-"+esami[i].getIscritti()[esami[i].getNumeroIscritti()].getMatricola());
                  }  
               } 
        }
        if(op.equals("x")){
                System.out.println("Uscita");
        }
      }
      while(!op.equals("x"));
        
       
    }
}

5 Risposte

  • Re: Esercizio java array

    reynold ha scritto:


    Purtroppo nel metodo main non tutto va a buon fine, mi trovo con eccezioni del tipo null pointer exception quindi oggetto che non è stato creato.
    Non ho letto tutto tutto ma .... una cosa "dubbia" l'ho subito vista:

    if(corsi==c){

    Questa è un confronto di uguaglianza per identità degli oggetti (NON per contenuto!). Raramente è quello che si vuole.
  • Re: Esercizio java array

    Grazie, ho sostituito con equals ma i problemi rimangono..
  • Re: Esercizio java array

    reynold ha scritto:


    Grazie, ho sostituito con equals ma i problemi rimangono..
    Beh, ci saranno sicuramente altre cose. Tipo (altra cosa vista al volo):
                    for(i=0;i<allievi[i].getNumeroCorsi();i++){
                      if(allievi[i].getMatricola().equals(matricola)){
                          m=30;
                      } 
    Qui su cosa stai iterando? Sull'array allievi, ovviamente. Ma la condizione del for usa getNumeroCorsi() che non c'entra nulla concettualmente con l'indice i (che è l'indice dell'allievo, non certo del corso).

    Devi "ragionare" di più su questi aspetti.
  • Re: Esercizio java array

    SI, mi ero accorto dell'errore nel ciclo e avevo corretto.
    -------
    Cerco di circostanziare la situazione.
    Facendo un po' di debug credo che i problemi siano qua.
    Sembra che il metodo iscrivi della classe studente dal metodo main non funzioni
    if(op.equals("3")){
                    System.out.println("Inserisci nome corso");
                    String nome=in.nextLine();
                    System.out.println("Inserisci matricola studente");
                    String matricola=in.nextLine();
                    for(int i=0;i<numesami;i++){
                      if(esami[i].getNome().equals(nome)){
                          for(int j=0;j<numStud;j++){
                              if(allievi[j].getMatricola().equals(matricola)){
                                  allievi[j].iscrivi(esami[i]);
                              }
                          }
                      }                  
       public void iscrivi(Corso c){
            corsi[numeroCorsi]=c;
            numeroCorsi++;
            c.iscrizione(this);
        }
    e qua metodo iscrizione classe corso
        public void iscrizione(Studente s){
            iscritti[numeroIscritti]=s;
            numeroIscritti++;
        }
    sembra proprio che l'array dei corsi e degli iscritti non vengano riempiti dal main
  • Re: Esercizio java array

    Ho risolto, si può chiudere.
Devi accedere o registrarti per scrivere nel forum
5 risposte