Rubrica in java errore durante esecuzione

di il
5 risposte

Rubrica in java errore durante esecuzione

Ho il seguente esercizio:
una rubrica contiene informazioni (nome, indirizzo, numero telefonico) su un certo numero di persone (per esempio 5), prestabilito (le informazioni sono preintrodotte nel metodo main()). L’utente dovrà fornire all’applicazione un nome da riga di comando e l’applicazione dovrà restituire le informazioni relative alla persona. Se il nome non è fornito, o se il nome immesso non corrisponde al nome di una persona preintrodotta dall’applicazione, deve essere restituito un messaggio significativo.
Il lettore non ha altri vincoli.

per svolgerlo ho scritto queste due classi:

-Rubrica:

public class Rubrica {
	// dichiarazione delle variabili d'istanza della classe.
	private String nome;
	private String cognome;
	private String numeroDiTelefono;
	
	// dichiarazione dei metodi della classe.
	public void setNome(String nome){
		this.nome = nome; // il this e' obbligatorio in questo caso 
	}
	
	public void setCognome(String cognome){
		this.cognome = cognome;
	}
	
	public void setTelefono(String numeroDiTelefono){
		this.numeroDiTelefono = numeroDiTelefono;
	}
	
	public String getNome(){
		return this.nome; // il this e' facoltativo 
	}
	
	public String getCognome(){
		return this.cognome; // il this e' facoltativo
	}
	
	public String getTelefono(){
		return this.numeroDiTelefono;
	}
	
	public Rubrica(){
		this.nome = "";
		this.cognome = "";
		this.numeroDiTelefono = "";
	}
	
	public Rubrica(String nome, String cognome, String numero){
		setNome(nome);  // riutilizzo
		setCognome(cognome); // riutilizzo
		setTelefono(numero); // riutilizzo
	}
	
	public void setAll(String nome, String cognome, String numeroDiTelefono){
		setNome(nome);
		setCognome(cognome);
		setTelefono(numeroDiTelefono);
	}
	
	public String toString(){
		return "Nome: " + nome + "\ncongome: " + cognome +"\nNumero di telefono: "+ numeroDiTelefono;
	}
}
-TestRubrica:

public class TestRubrica {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Rubrica contatti[] = new Rubrica[5];
		contatti[0].setAll("Marco", "Franzin", "1234567");
		contatti[1].setAll("Luca", "Naccari", "7654321");
		contatti[2].setAll("Andrea", "Lettieri", "6789055432");
		contatti[3].setAll("Sever", "Pop", "1238904567");
		contatti[4].setAll("Giorgio", "Lucciarello", "1290347856");
		
		if (args[0].isEmpty()){
			System.out.println("non e' stato passato alcun nome");
		}
		else{
			for (int i = 0; i < 5; i++){
				if (contatti[i].getNome() == args[0]){
					System.out.println(contatti[i].toString());
				}
				else{
					i++;
					continue;
				}
			}
		}
		
	}
}
essendo ancora un novellino nella programmazione in java sono sicuro di aver sbagliato una cosa banale...

l'errore che mi da durante l'esecuzione è il seguente:

Exception in thread "main" java.lang.NullPointerException
at TestRubrica.main(TestRubrica.java:8)

non sono riuscito nemmeno a capirlo quindi non so guardare..
potete aiutarmi?

grazie a tutti in anticipo.

5 Risposte

  • Re: Rubrica in java errore durante esecuzione

    Nosba ha scritto:


    	public static void main(String[] args) {
    		Rubrica contatti[] = new Rubrica[5];
    		contatti[0].setAll("Marco", "Franzin", "1234567");
    Istanziare l'array di oggetti non fa istanziare automaticamente gli oggetti! contatti contiene inizialmente 5 valori null. Gli oggetti li devi istanziare espressamente tu.
  • Re: Rubrica in java errore durante esecuzione

    andbin ha scritto:


    Nosba ha scritto:


    	public static void main(String[] args) {
    		Rubrica contatti[] = new Rubrica[5];
    		contatti[0].setAll("Marco", "Franzin", "1234567");
    Istanziare l'array di oggetti non fa istanziare automaticamente gli oggetti! contatti contiene inizialmente 5 valori null. Gli oggetti li devi istanziare espressamente tu.
    Esatto...devi creare tu 5 contatti e poi inserirli nell'array altrimenti ti darà sempre errore...stai andando ad invocare metodi su oggetti null!!
  • Re: Rubrica in java errore durante esecuzione

    Ho introdotto un ciclo for per istanziare gli oggetti ecco il codice della classe del main:
    
    public class TestRubrica {
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		Rubrica contatti[] = new Rubrica[5];
    		
    		for (int i = 0; i < 5; i++){
    			contatti[i] = new Rubrica();
    		}
    		contatti[0].setAll("Marco", "Franzin", "1234567");
    		contatti[1].setAll("Luca", "Naccari", "7654321");
    		contatti[2].setAll("Andrea", "Lettieri", "6789055432");
    		contatti[3].setAll("Sever", "Pop", "1238904567");
    		contatti[4].setAll("Giorgio", "Lucciarello", "1290347856");
    		
    		if (args[0].isEmpty()){
    			System.out.println("non e' stato passato alcun nome");
    		}
    		else{
    			for (int i = 0; i < 5; i++){
    				if (contatti[i].getNome() == args[0]){
    					System.out.println(contatti[i].toString());
    				}
    			}
    		}
    		
    	}
    }
    
    ora quando lo chiamo da riga di comando mi scrivere un errore se non inserisco il nome invece se lo inserisco non mi causa nessun output ne capite il motivo?
  • Re: Rubrica in java errore durante esecuzione

    Nosba ha scritto:


    		for (int i = 0; i < 5; i++){
    			contatti[i] = new Rubrica();
    		}
    		contatti[0].setAll("Marco", "Franzin", "1234567");
    Non è di per sé sbagliato tecnicamente avere un costruttore no-arg (senza argomenti) e poi avere un metodo es. setAll per impostare N (o tutti) dati. Ma è una cosa abbastanza strana ... perlomeno inusuale. Quindi abituati ad usare correttamente i costruttori, definisci cioè un costruttore che riceve quei dati e usa quello. Ti risparmia tra l'altro il ciclo for.

    Nosba ha scritto:


    		if (args[0].isEmpty()){
    Se non passi argomenti all'avvio, args è vuoto, lunghezza 0. Quindi non esiste un args[0]. Pertanto un controllo a riguardo sarebbe da fare.

    Nosba ha scritto:


    				if (contatti[i].getNome() == args[0]){
    Il contenuto delle stringhe (in generale degli oggetti) va confrontato con il metodo equals .... non con == .
  • Re: Rubrica in java errore durante esecuzione

    Grazie mille andbin adesso rimedio a questa schifezza di codice che ho scritto
    grazie ancora..
Devi accedere o registrarti per scrivere nel forum
5 risposte