Não consegui achar o erro!

Alguem porderia me dizer onde estar o erro desse aplicativo:
Aqui estão as 3 classes:

[code]public class Casa1 {

String cor = "";
int totalDePortas = 0;
Porta porta[];


void pinta(String s){
	cor = s;
}
int cont = 0;
int quantasPortasEstaoAbertas(){
	for(int x=0; x<porta.length; x++){
		if(porta[x].aberta == true){
			cont++;
		}
		else{
			return cont;
		}
	}
	return cont;
}
void adicionaPorta(Porta p){
	p = new Porta();
}
int totalDePortas(){
	for(int x=0; x<porta.length; x++){
		if(porta[x] != null){
		 	totalDePortas += 1;
		}
		else{
	    	return totalDePortas;
	    }
	}
	return totalDePortas;
}

}[/code]

public class Porta { boolean aberta = false; }

[code]public class Casa1Test {

public static void main(String[] args){
	
	Casa1 c1 = new Casa1();
	c1.pinta("Azul");
	c1.porta = new Porta[3];
	c1.adicionaPorta(c1.porta[0]);
	c1.adicionaPorta(c1.porta[1]);
	c1.adicionaPorta(c1.porta[2]);
	c1.porta[0].aberta = true;
	c1.porta[1].aberta = false;
	c1.porta[2].aberta = true;
	
	System.out.println("Exitem quantas portas na casa?  " + c1.totalDePortas());
	System.out.println("Quantas portas estão abertas?  " + c1.quantasPortasEstaoAbertas());
	
}

}[/code]

Aparece esse na execução:
Exception in thread “main” java.lang.NullPointerException
at Casa1Test.main(Casa1Test.java:11)

A linha 11 é esta: c1.porta[0].aberta = true;

Basicamente vc cria um espaco em memoria,joga fora e tenta acessar o nada.

Quando vc chega em c1.adicionaPorta(c1.porta[0]); vc aloca um espaço na memória,que funciona,mas somente na função e quando vc sai dela o negócio é ‘jogado fora’.

Quando vc acessa o array pra alterar os valores,porta[x] está como null (endereço inválido,fora dos limites,etc).Por isso NullPointerException: vc não tem uma classe ‘alocada’ pra acessar.

Tenta essas duas variantes, e acompanhe pelo debug do eclipse,comparando com o teu codigo original:

void adicionaPorta() { for (int i=0;i<3;i++) { porta[i] = new Porta(); } }

c1.adicionaPorta();


void adicionaPorta(int i){
	porta[i] = new Porta();
}

c1.adicionaPorta(0); c1.adicionaPorta(1); c1.adicionaPorta(2);

Mas na questão é pedido que se coloque um método
" void adicionaPorta(Porta p) " com um arg do tipo Porta.

Fiz essas modificações:

[code]public class Casa1Test {

public static void main(String[] args){
	
	Casa1 c1 = new Casa1();
	c1.pinta("Azul");
	System.out.println("Cor da casa: " + c1.cor);
	c1.porta = new Porta[3];
	
	for(int i=0; i<3; i++){
		c1.porta[i] = new Porta();
		c1.adicionaPorta(c1.porta[i]);
	}
	System.out.println("Exitem quantas portas na casa?  " + c1.totalDePortas());
	c1.porta[0].aberta = false;
	c1.porta[1].aberta = true;
	c1.porta[2].aberta = false;
	System.out.println("Quantas portas estão abertas?  " + c1.quantasPortasEstaoAbertas());
	
}

}[/code]

[code]public class Casa1 {

String cor = "";
int totalDePortas = 0;
Porta porta[];


void pinta(String s){
	cor = s;
}
int cont = 0;
int quantasPortasEstaoAbertas(){
	for(int x=0; x<porta.length; x++){
		if(porta[x].aberta == true){
			cont = cont + 1;
		}
		else{
			cont = cont;
		}
	}
	return cont;
}
void adicionaPorta(Porta p){
	if(p != null){
		totalDePortas += 1;
	}
}
int totalDePortas(){
	return this.totalDePortas;
}

}[/code]

public class Porta { boolean aberta = false; }

Será que está certo agora?