PDA

View Full Version : [JAVA] problemino nullPointerException


8rebel6
12-03-2008, 14:26
salve a tutti vorrei cortesemente sapere come mai non riesco a stampare a video il contenuto di un array di oggetti xche incappo sempre in un nullPointerException.

Riporto qua sotto le due classi :

CLASSE MIOSOGGETTO

public class MioSoggetto {

private String cognome;
private String nome;
private String luogoNascita;
private String dataNascita;

//metodi get
public String getCognome()
{
return cognome;
}
public String getNome()
{
return nome;
}
public String getLuogoNascita()
{
return luogoNascita;
}
public String getDataNascita()
{
return dataNascita;
}

//metodi set
public void setCognome(String cognome)
{
this.cognome = cognome;
}
public void setNome(String nome)
{
this.nome = nome;
}
public void setLuogoNascita(String luogoNascita)
{
this.luogoNascita = luogoNascita;
}
public void setDataNascita(String dataNascita)
{
this.dataNascita = dataNascita;
}


CLASSE MAIN

MioSoggetto [] mioSoggetto = new MioSoggetto[5];

mioSoggetto[0].setCognome("Rossi");
mioSoggetto[0].setNome("Paolo");
mioSoggetto[0].setLuogoNascita("Torino");
mioSoggetto[0].setDataNascita("16/10/1978");

mioSoggetto[1].setCognome("Granieri");
mioSoggetto[1].setNome("Manuela");
mioSoggetto[1].setLuogoNascita("Roma");
mioSoggetto[1].setDataNascita("08/09/1980");

mioSoggetto[2].setCognome("Moro");
mioSoggetto[2].setNome("Tommaso");
mioSoggetto[2].setLuogoNascita("Ivrea");
mioSoggetto[2].setDataNascita("11/12/1969");

mioSoggetto[3].setCognome("Giuliano");
mioSoggetto[3].setNome("Salvatore");
mioSoggetto[3].setLuogoNascita("Secondigliano");
mioSoggetto[3].setDataNascita("04/12/1971");

mioSoggetto[4].setCognome("Riina");
mioSoggetto[4].setNome("Salvatore");
mioSoggetto[4].setLuogoNascita("Corleone");
mioSoggetto[4].setDataNascita("05/07/1941");

//SE VOLESSI STAMPARE IL COGNOME DELLA POSIZIONE ZERO VA IN ERRORE
System.out.println (mioSoggetto[0].getCognome);
}

SE QUALCUNO HA TEMPO...

GRAZIE MILLE

sottovento
12-03-2008, 14:37
Ciao,
MioSoggetto [] mioSoggetto = new MioSoggetto[5];
alloca l'array ma non il singolo oggetto, non e' come C++!

Dopo aver eseguito questa istruzione, devi allocare il singolo oggetto, magari usando un codice simile a questo:

for (int i = 0; i < mioSoggetto.length; i++)
mioSoggetto[i] = new MioSoggetto ();

8rebel6
12-03-2008, 14:45
Ciao,
MioSoggetto [] mioSoggetto = new MioSoggetto[5];
alloca l'array ma non il singolo oggetto, non e' come C++!

Dopo aver eseguito questa istruzione, devi allocare il singolo oggetto, magari usando un codice simile a questo:

for (int i = 0; i < mioSoggetto.length; i++)
mioSoggetto[i] = new MioSoggetto ();


grazie dell'aiuto bye

banryu79
12-03-2008, 18:03
Già che ci sei, per comodità potresti implementare nella classe MioSoggetto un costruttore che prende in ingresso i parametri che setti con i metodi getter/setter :


...
public class MioSoggetto {

// dichiarazione esplicita costruttore di default: se dichiari altri costruttori
// ma vuoi comunque poter usare quello di default allora devi esplicitarlo
public MioSoggetto() {}

// dichiarazione costruttore con parametri, per comodità
public MioSoggetto(String cogn, String nom, String lnasc, String dnasc) {
cognome = cogn;
nome = nom;
luogoNascita = lnasc;
dataNascita = dnasc;
}

}


In questo modo puoi sia inizializzare un array di oggetti di default in un ciclo for() come nell'esempio di sottovento che inizializzare un oggetto alla volta ma invece di dover scrivere:


...
mioSoggetto[0] = new MioSoggetto();
mioSoggetto[0].setCognome("Rossi");
mioSoggetto[0].setNome("Paolo");
mioSoggetto[0].setLuogoNascita("Torino");
mioSoggetto[0].setDataNascita("16/10/1978");
...


puoi accorciare un po' il codice:


...
mioSoggetto[0] = new MioSoggetto("Francesco", "Baro", "Padova", "08/06/1979");
...


Ciao :)

8rebel6
13-03-2008, 08:07
Già che ci sei, per comodità potresti implementare nella classe MioSoggetto un costruttore che prende in ingresso i parametri che setti con i metodi getter/setter :


...
public class MioSoggetto {

// dichiarazione esplicita costruttore di default: se dichiari altri costruttori
// ma vuoi comunque poter usare quello di default allora devi esplicitarlo
public MioSoggetto() {}

// dichiarazione costruttore con parametri, per comodità
public MioSoggetto(String cogn, String nom, String lnasc, String dnasc) {
cognome = cogn;
nome = nom;
luogoNascita = lnasc;
dataNascita = dnasc;
}

}


In questo modo puoi sia inizializzare un array di oggetti di default in un ciclo for() come nell'esempio di sottovento che inizializzare un oggetto alla volta ma invece di dover scrivere:


...
mioSoggetto[0] = new MioSoggetto();
mioSoggetto[0].setCognome("Rossi");
mioSoggetto[0].setNome("Paolo");
mioSoggetto[0].setLuogoNascita("Torino");
mioSoggetto[0].setDataNascita("16/10/1978");
...


puoi accorciare un po' il codice:


...
mioSoggetto[0] = new MioSoggetto("Francesco", "Baro", "Padova", "08/06/1979");
...


Ciao :)

grazie sei stato miolto utile. ciao