Oi boa tarde estou resolvendo esse exercicio mas está dando o erro “Exception in thread “main” java.lang.NullPointerExceptionat TestCasa.main(TestCasa.java:7)”
class Porta {
String cor;
boolean aberta;
int dimensaoX;
int dimensaoY;
int dimensaoZ;
void abre(){
aberta = true;
}
void fecha(){
aberta = false;
}
void pinta(String s){
this.cor = s;
}
void estaAberta(){
if(aberta == true){
System.out.println("Está aberta!");
}else {
System.out.println("Está fechada!");
}
}
void mostra(){
System.out.println("A cor da porta é: "+this.cor);
System.out.println("A dimensão X é: "+this.dimensaoX);
System.out.println("A dimensão Y é: "+this.dimensaoY);
System.out.println("A dimensão Z é: "+this.dimensaoZ);
}
}
class Casa {
String cor;
Porta porta1;
Porta porta2;
Porta porta3;
void pinta(String S){
this.cor = S;
}
int quantasPortasEstaoAbertas(){
int i = 0;
if(porta1.aberta == true){
i += 1;
}if(porta2.aberta == true){
i += 1;
}if(porta3.aberta == true){
i += 1;
}
return i;
}
void mostra(){
System.out.println("Cor da casa: "+this.cor);
System.out.println("Cor da porta1: "+this.porta1.cor);
System.out.println("DimensãoX da porta1: "+this.porta1.dimensaoX);
System.out.println("DimensãoY da porta1: "+this.porta1.dimensaoY);
System.out.println("DimensãoZ da porta1: "+this.porta1.dimensaoZ);
System.out.println("Cor da porta2: "+this.porta2.cor);
System.out.println("DimensãoX da porta2: "+this.porta2.dimensaoX);
System.out.println("DimensãoY da porta2: "+this.porta2.dimensaoY);
System.out.println("DimensãoZ da porta2: "+this.porta2.dimensaoZ);
System.out.println("Cor da porta3: "+this.porta3.cor);
System.out.println("DimensãoX da porta3: "+this.porta3.dimensaoX);
System.out.println("DimensãoY da porta3: "+this.porta3.dimensaoY);
System.out.println("DimensãoZ da porta3: "+this.porta3.dimensaoZ);
}
}
1º: Quando fazemos validação com valor booleando, ele só pode ser true ou false, entao não tem necessidade de verificar se ele é true, poderia ficar apenas if (aberta) { }
2º: Procure usar atributos privados e encapsulamento, métodos getters e setters, ai quando for settar valor, use
[code]casa.setCor(“Branca”);
e não
casa.cor = "Branca";
3º: O NullPointerException está ocorrendo, porque vc está acessando o atributo porta1, que vem da Classe Porta, e ele está Nulo, pois você acabou de criar o objeto Casa, para não ocorrer isso, voce teria que criar os objetos Porta (1,2,3) e setar eles para o atributo porta1,2,3 do seu objeto casa
Oi igor_ks
1º ponto ok,
2º ponto, ainda estou ainda estou aprendendo por isso não sei usá-los ainda,
o 3º ponto tentei fazer com que objeto porta fizesse parte do objeto casa, não sei se fiz direito.
[quote=Akyama]Oi igor_ks
1º ponto ok,
2º ponto, ainda estou ainda estou aprendendo por isso não sei usá-los ainda,
o 3º ponto tentei fazer com que objeto porta fizesse parte do objeto casa, não sei se fiz direito.[/quote]
Você tem que instanciar as portas das Casas.
A forma mais simples seria você adicionar esse código na sua classe Casa:
public Casa() {
porta1 = new Porta();
porta2 = new Porta();
porta3 = new Porta();
}
Lembre-se, quando você cria um objeto, caso eles não sejam inicializados manualmente o Java automaticamente os inicializa para você. Os valores abaixo são os valores que ele utiliza:
int = 0
short = 0
long = 0
double = 0.0
float = 0.0
char = (espaço)
byte = 0
boolean = false
Object = null
Portanto, quando você tentou acessar sua Porta, ela estava null o que resultou no NullPointerException.
Oi Sem_Nome muito obrigado o programa rodou plenamente!
class Casa {
String cor;
Porta porta1 = new Porta();
Porta porta2 = new Porta();
Porta porta3 = new Porta();
void pinta(String S){
this.cor = S;
}
int quantasPortasEstaoAbertas(){
int i = 0;
if(porta1.aberta == true){
i += 1;
}if(porta2.aberta == true){
i += 1;
}if(porta3.aberta == true){
i += 1;
}
return i;
}
void mostra(){
System.out.println("Cor da casa: "+this.cor);
System.out.println("Cor da porta1: "+this.porta1.cor);
System.out.println("DimensãoX da porta1: "+this.porta1.dimensaoX);
System.out.println("DimensãoY da porta1: "+this.porta1.dimensaoY);
System.out.println("DimensãoZ da porta1: "+this.porta1.dimensaoZ);
System.out.println("Cor da porta2: "+this.porta2.cor);
System.out.println("DimensãoX da porta2: "+this.porta2.dimensaoX);
System.out.println("DimensãoY da porta2: "+this.porta2.dimensaoY);
System.out.println("DimensãoZ da porta2: "+this.porta2.dimensaoZ);
System.out.println("Cor da porta3: "+this.porta3.cor);
System.out.println("DimensãoX da porta3: "+this.porta3.dimensaoX);
System.out.println("DimensãoY da porta3: "+this.porta3.dimensaoY);
System.out.println("DimensãoZ da porta3: "+this.porta3.dimensaoZ);
System.out.println("As portas abertas são: "+this.quantasPortasEstaoAbertas());
}
}
Agora vou aprender a programar levando em consideração o acrécimo de mais portas/janelas…etc. afinal somos programadores OO, obrigado a todos!