Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    77

    Exception in thread "main" java.lang.NullPointerException

    Ciao a tutti, sono un principiante di java. Avviando il programma mi da il seguente errore:
    Exception in thread "main"
    java.lang.NullPointerException
    at anagrafe.Anagrafe.primo(Anagrafe.java:42)
    at Principale.main(Principale.java:31)

    Questo è il codice delle classi.
    Principale.java
    codice:
    import anagrafe.Anagrafe;
    
    /**
     * Classe con un main di esempio.
     */
    public class Principale {
    
        /**
         * Esempio di uso della classe Anagrafe
         * Puo' essere utilizzato come semplice "test"
         * 
         */
        public static void main(String[] args) {
            
            // Quando si crea un oggetto Anagrafe si deve fornire il nome del comune 
            Anagrafe a = new Anagrafe("Torino");
            
            //...che e' poi accessibile tramite il metodo getComune().
            String nomeComune = a.getComune();
            System.out.println("Creata anagrafe per il comune di " + nomeComune);
            
            // L'aggiunta di un nuovo residente avviene 
            // tramite il metodo iscrivi() che riceve tre parametri
            // stringa: nome, cognome, e indirizzo
            a.iscrivi("Mario","Rossi","Via Roma 84");
            a.iscrivi("Giovanni","Verdi","Largo Milano 123");
            a.iscrivi("Giuseppe","Bianchi","Piazza Napoli 219");
            
            // Per accedere al primo residente si utilizza 
            // il metodo primo()
            String primoResidente = a.primo();
            System.out.println("primo() --> " + primoResidente);
    
            // Per accedere ad un residente qualsiasi dell'anagrafe 
            // si utilizza il metodo residente() che riceve come parametro 
            // il numero d'ordine del residente (a partire da 1, 
            // percio' primo() == residente(1));
            primoResidente = a.residente(1); 
            System.out.println("residente(1) --> " + primoResidente);
            System.out.println("residente(2) --> " + a.residente(2));
            System.out.println("residente(3) --> " + a.residente(3));
            
            // Il metodo elenco() restituisce una stringa con 
            // l'elenco dei residenti dell'anagrafe, uno per riga 
            // (ogni riga termina con ';', l'ultima con '.')
            System.out.println("Elenco: " + a.elenco());
            
            // Il metodo cerca() restituisce la stringa 
            // corrispondente al primo residente che contiene il 
            // parametro nel nome, nel cognome oppure nell'indirizzo
            System.out.println("Ricerca 'Milano': " + a.cerca("Milano"));
        }
    }
    Anagrafe.java

    codice:
    package anagrafe;
    
    public class Anagrafe {
        
         String nomeAnagrafe;
        private Residente residenti[];
        
        static final int MAX = 20;
        int i;
    
        // Inserire tutti gli attributi necessari
        // Eventualmente creare altre classi
        
      /**
       * Crea una nuova anagrafe per il comune specificato
       */
      public Anagrafe(String comune) {
          nomeAnagrafe=comune;
          residenti = new Residente[MAX];
          i=0;
          
      }
    
      /**
       * Aggiunge un nuovo residente all'anagrafe
       */  
      public void iscrivi(String nome, String cognome, String indirizzo){
          
          Residente r = new Residente();
          r.nome=nome;
          r.cognome=cognome;
          r.indirizzo=indirizzo;
          
          residenti[i]=r;
          i++;
      }
    
      /**
       * Restituisce il primo residente
       */  
      public String primo() {
          return residenti[i].nome + " " + residenti[i].cognome + " " + residenti[i].indirizzo;
      }
    
      /**
       * Restituisce il nome del comune
       */
      public String getComune() {
        return nomeAnagrafe;
      }
    
      /**
       * Restituisce il residente i-esimo iscritto all'anagrafe
       */
      public String residente(int i) {
          return residenti[i-1].nome + " " + residenti[i-1].cognome + " " + residenti[i-1].indirizzo;
      }
    
      /**
       * Restituisce una stringa con l'elenco dei residenti,
       * ciascuno su una riga diversa
       * Ogni riga termina con ';', l'ultima con '.'
       */
      public String elenco() {
            String result = "(";
              for(int i=0; i<residenti.length; ++i){
                  if(residenti[i] == null) break;
                  if(i>0) result+=", ";
                  result += residente(i+1);
              }
              result += ")";
              return result;
      }
    
      /**
       * Restituisce la stringa con il primo residente che
       * contiene il parametro daCercare all'interno del nome,
       * del cognome o dell'indirizzo
       */
      public String cerca(String daCercare) {
          return null;
      }
    
    }
    Residente.java
    codice:
    package anagrafe;
    
    public class Residente {
        
        String nome;
        String cognome;
        String indirizzo;
    
    }
    Sapete dirmi cosa sbaglio? Grazie

  2. #2
    Il problema sta nell'uso della varibiale di classe i (Classe Anagrafe) in quanto dopo ogni chiamata a iscrivi tu aumenti di 1 il suo valore. Ma poi quando chiami il metodo primo cerchi di leggere la posizione i dall'array residenti che ovviamente non contiene nulla a quella posizione.

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.