[RESOLVIDO]Exercício Básico: Modelagem de Casa e Portas

Boa noite,

Estou tentando resolver o exercício 3, Seção 4.14 da apostila de Java Básico da Caelum, e fiquei com algumas dúvidas no erro que apareceu no momento da compilação.

Optei por não postar todo o enunciado para não deixar o post extenso demais, mas ele está aqui.

Trabalhei com 3 classes: uma classe Porta.java, outra classe Casa.java e a classe com o método main chamada TestaCasa.java. Os códigos são estes:

Porta.java:
[code]class Porta{
Boolean aberta;
String cor = “Amarela”;
int dimensaoX = 10;
int dimensaoY = 20;
int dimensaoZ = 30;

void abre(){
	aberta = true;
}

void fecha(){
	aberta = false;
}

void pinta(String novaCor){
	cor = novaCor;
}

boolean estaAberta(){
		if (aberta){
		return true;
	}
	else{
		return false;
	}
}

void mostra(){
System.out.println("Dimensao X: " + this.dimensaoX);
System.out.println("Dimensao Y: " + this.dimensaoY);
System.out.println("Dimensao Z: " + this.dimensaoZ);
System.out.println("Cor atual: " + this.cor);
System.out.println("Esta aberta? " + this.estaAberta());
}

}[/code]
Casa.java:
[code]class Casa{
String cor = “Verde”;
Porta porta1;
Porta porta2;
Porta porta3;

void pinta(String s){
	cor = s;
}

int quantasPortasEstaoAbertas(){
	int i = 1;
	if (this.porta1.estaAberta()){
		i++;
	}
	if (this.porta2.estaAberta()){
		i++;
	}
	if (this.porta3.estaAberta()){
		i++;
	}
	return i;
}

}[/code]
TestaCasa.java:
[code]class TestaCasa {
public static void main(String[] args) {

Casa c = new Casa();
Porta porta1 = new Porta();
Porta porta2= new Porta();
Porta porta3 = new Porta();

c.pinta("Azul");
c.porta1.abre();
c.porta2.abre();
c.porta3.abre();
//c.porta1.aberta = true;
//c.porta2.aberta = true;
//c.porta3.aberta = true;

c.quantasPortasEstaoAbertas();

}

}[/code]
Os 3 compilam sem problemas, porém quando executo o TesteCasa, recebo o erro de “NullPointerException”

Exception in thread “main” java.lang.NullPointerException
at TestaCasa.main(TestaCasa.java:10)

E acontece o mesmo erro se substituo as linhas 10-12 pelos códigos comentados.

Procurando aqui no fórum, vi algumas soluções em postagens mais antigas que criam o objeto Porta na própria classe Casa, através de:

Porta porta1 = new Porta();

Mas faz sentido criar o objeto dentro da declaração da própria classe? Para mim faz mais sentido “criar as Portas” quando estou testando a casa, no método main. Ou não?

Agradeço qualquer insight,
TG

Você está instanciando outras portas, não as portas da casa. O correto seria:

Casa c  - new Casa();
c.porta1 = new Porta();

//ou

Porta porta1 =new Porta();
c.porta1 = porta1;

Realmente Erick, obrigado por sinalizar.

Ainda apanhando um pouco de POO. :slight_smile:

Tópico resolvido.
Abs.