Errore in un programma java

di il
5 risposte

Errore in un programma java

Salve ragazzi, sono entrato da due giorni nel mondo della programmazione ad oggetti.. qualcuno sarebbe così gentile da spiegarmi in che consiste questo errore che riscontro?
Sto provando a creare una rubrica..

import java.util.Scanner;

public class Rubrica {
	String nome;
	String indirizzo;
	String ntel;
	private Scanner sc;
	
	Rubrica(String nome ,String indirizzo ,	String ntel){
		this.nome=nome;
		this.indirizzo=indirizzo;
		this.ntel=ntel;
		
	}
	
	void aggiungiVoce(){
		sc = new Scanner(System.in);
		System.out.print("Inserisci il nome del contatto: ");
		nome=sc.next();
		System.out.print("Inserisci l'indirizzo del contatto: ");
		indirizzo=sc.nextLine();
		System.out.print("Inserisci il numero telefonico del contatto: ");
		ntel=sc.next();
	}
	
	void stampaVoce(){
		System.out.print("Nome : "+ nome);
		System.out.print("Indirizzo : "+ indirizzo);
		System.out.print("N. tel. : "+ ntel);
	}

}



public class Prova {

	public static void main(String[] args) {
		
		Rubrica arrayR[]= new Rubrica[3];
		for(int i=0; i<arrayR.length; i++){
			arrayR[i].aggiungiVoce();
		}
		
		for(int j=0; j<arrayR.length; j++){
			arrayR[j].stampaVoce();
		}
	}

}

questo è l'errore:
Exception in thread "main" java.lang.NullPointerException
at Prova.main(Prova.java:8)

grazie mille a chi mi risponderà!!!

5 Risposte

  • Re: Errore in un programma java

    gaab ha scritto:


    questo è l'errore:
    Exception in thread "main" java.lang.NullPointerException
    at Prova.main(Prova.java:8)
    È il solito errore da "beginner" (quindi normale/comune, non ti allarmare). Quando istanzi un array con es. new Rubrica[3] stai istanziando solo l'oggetto array in sè ... NON gli N (3 in questo caso) oggetti da contenere. L'array contiene inizialmente solo valori null (=niente oggetto). I singoli oggetti devi istanziarli tu esplicitamente ed assegnarli a ciascun indice nell'array prima di fare qualunque altra cosa con gli elementi.
  • Re: Errore in un programma java

    Il concetto l'ho capito ...ma non riesco proprio a capire cosa dovrei scrivere..
  • Re: Errore in un programma java

    gaab ha scritto:


    Il concetto l'ho capito ...ma non riesco proprio a capire cosa dovrei scrivere..
    Il problema è anche un altro: di "design". Io ti ho spiegato in generale la questione della istanziazione dell'array.
    Nel tuo codice c'è una questione/problema in più legata proprio al design della classe Rubrica che forse per te non è molto evidente. Per istanziare un oggetto Rubrica da assegnare nell'array, devi invocare un suo costruttore. L'unico costruttore che hai messo riceve già nome, ecc...
    Ma se li riceve già, vuol dire che li devi già avere e quindi il aggiungiVoce è di fatto inutile.

    Insomma ... è un po' contorto. Innanzitutto visto che la classe rappresenta solo un nominativo, sarebbe stato meglio chiamarla es. Nominativo o NominativoRubrica. Solo Rubrica fa pensare ad un insieme di nominativi, che non è così.
    Ma a parte come chiami la classe .... comunque la tua classe modella una entità e allo stesso tempo interagisce con l'utente. Questo è concettualmente sbagliato.
  • Re: Errore in un programma java

    Data che sono nuovissimo di questo linguaggio potresti provare a scrivere tu questa classe? Non ho proprio idea di come scrivere in codice cio che mi hai spiegato..
  • Re: Errore in un programma java

    gaab ha scritto:


    Data che sono nuovissimo di questo linguaggio potresti provare a scrivere tu questa classe? Non ho proprio idea di come scrivere in codice cio che mi hai spiegato..
    Fai una classe es. Nominativo ... o NominativoRubrica .. o VoceRubrica (l'importante è che chiarisca il senso di modellare 1 nominativo). Metti i campi con private e metti i metodi getter/setter public. Aggiungi pure un costruttore specifico, se vuoi, per passare subito tutti i dati.
    Nella classe non devi fare alcuna interazione con l'utente. La stampa dei dati invece è accettabile.

    Quindi es. nel main istanzi l'array, per ciascun nominativo usi Scanner per chiedere i dati, istanzi l'oggetto e lo assegni nell'array. Alla fine puoi stampare i dati.
Devi accedere o registrarti per scrivere nel forum
5 risposte