Newsgroup: it.comp.java
Titolo: problemi nella creazione di array di oggetti da me creati

Ho provato a creare una classe Room, dopo averla creata in un main ho
provato a creare un array di Room in un main. Il compilatore non mi segnala
errori, ma se provo ad eseguire il programma ricevo questo messaggio
d'errore:
java.lang.NullPointerException
        at Museo.Primus.main(Primus.java:75)
Exception in thread "main"
questo è il main:
    public static void main(String[] args){
        String fin="";
        Room museo[]=new Room[9];
        for (int i=0; i<9; i++){
           museo[i].setRoom(0, "--", "--", "--", 0, 0, 0, 0);
        }
        System.out.println(museo[0].toString());
        JOptionPane.showMessageDialog (null, museo[0].toString(),
"Risultato", JOptionPane.PLAIN_MESSAGE);
        System.exit(0);
    }
Come posso risolvere?
Questa è la classe Room da me definita:
public class Room {
    private int id;
    private String nome;
    private String periodo;
    private String opera;
    private int vicinoa;
    private int vicinod;
    private int vicinos;
    private int vicinods;
    public Room() {
        id=100;
        nome="";
        periodo="";
        opera="";
        vicinoa=100;
        vicinod=100;
        vicinos=100;
        vicinods=100;
    }
    public Room(int a, String s, String p, String o, int va, int vd, int vs,
int vds){
        setId(a);
        setNome(s);
        setPeriodo(p);
        setOpera(o);
        setVicinoAvanti(va);
        setVicinoDietro(vd);
        setVicinoSinistra(vs);
        setVicinoDestra(vds);
    }
    public void setRoom(int a, String s, String p, String o, int va, int vd,
int vs, int vds){
        setId(a);
        setNome(s);
        setPeriodo(p);
        setOpera(o);
        setVicinoAvanti(va);
        setVicinoDietro(vd);
        setVicinoSinistra(vs);
        setVicinoDestra(vds);
    }
    public void setId(int a){
        id=a;
    }
    public void setNome(String s){
        nome=s;
    }
    public void setPeriodo(String p){
        periodo=p;
    }
    public void setOpera(String o){
        opera=o;
    }
    public void setVicinoAvanti(int va){
        vicinoa=va;
    }
    public void setVicinoDietro(int vd){
        vicinod=vd;
    }
    public void setVicinoSinistra(int vs){
        vicinos=vs;
    }
    public void setVicinoDestra(int vds){
        vicinods=vds;
    }
    public int getId(){
        return id;
    }
    public String getNome(){
        return nome;
    }
    public String getPeriodo(){
        return periodo;
    }
    public String getOpera(){
        return opera;
    }
    public int getVicinoAvanti(){
        return vicinoa;
    }
    public int getVicinoDietro(){
        return vicinod;
    }
    public int getVicinoSinistra(){
        return vicinos;
    }
    public int getVicinoDestra(){
        return vicinods;
    }
    public String toString(){
        String f="";
        f+="ID: " + id + ", nome stanza: " + nome + ", periodo stanza: " +
periodo + ", opera principale: " + opera;
        f+="/nVicino Avanti: " + vicinoa + "\n";
        f+="/nVicino Dietro: " + vicinod + "\n";
        f+="/nVicino Sinistra: " + vicinos + "\n";
        f+="/nVicino Destra: " + vicinods + "\n";
        return f;
    }
}

         Room museo[]=new Room[9];
Questo crea un array di riferimenti a oggetti di classe Room ma non crea gli
oggetti. L'array è inizializzato con tutti null, quindi è anche giusto che
tu ottenga una NullPointerException ;)
Sostituisci nel for:
for (int i=0; i<9; i++){
  museo[i] = new Room(0, "--", "--", "--", 0, 0, 0, 0);
}
E se avevi fatto setRoom() apposta per quel for toglilo dalla classe.
Un'ultima cosa, sarebbe meglio:
for (int i=0; i<museo.length; i++)
da un punto di vista concettuale perché il ciclo itera sull'array ed è
giusto che sia legato alla lunghezza dell'array (non ad un numero
"qualsiasi" :) e da quello pratico perché se un giorno vuoi cambiare la
lunghezza dell'array devi andarti a cercare per tutto il programma dove hai
messo i vari 9.
Ciao
Matteo
-- 
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it