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

2 respostas
O

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:
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());
	}
}
Casa.java:
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;
	}

}
TestaCasa.java:
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();

	}
}
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

2 Respostas

ErickRAR

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;
O

Realmente Erick, obrigado por sinalizar.

Ainda apanhando um pouco de POO. :slight_smile:

Tópico resolvido.
Abs.

Criado 17 de fevereiro de 2014
Ultima resposta 19 de fev. de 2014
Respostas 2
Participantes 2