[JAVA OO] Qual é o problema aqui?

Boa tarde pessoal

Estou na faculdade, 2º ano e estou com algumas dificuldades…

Na verdade esse exercício fizemos em sala de aula, mas o mesmo esta com erros… e eu não achei…

//PUBLIC CLASS CASA

public class Casa {
	private String cor;
	private String material;
	private double valor;
	private Porta porta;

	public Porta getPorta(){
		return this.porta;
	}

	public void setPorta(Porta Porta2){
		this.porta = Porta2;
	}


	public String getCor(){
		return cor;
	}

	public void setCor(String cor2){
		cor = cor2;
	}

	public String getMaterial(){
		return material;
	}

	public void setMaterial(String material2){
		material = material2;
	}

	public double getValor(){
		return valor;
	}

	public void setValor(double Valor2){
		valor = Valor2;
	}

	public boolean equals(Casa outraCasa){
		if (this.getCor().equals(outraCasa.getCor()) &&
				this.getMaterial().equals(outraCasa.getMaterial()) &&
				this.getValor() == outraCasa.getValor())
			return true;
		else
			return false;
	}


	public String toString(){
		return 	"Cor: " + getCor() + "\n" + 
				"Material: " + getMaterial() + "\n" +
				"Valor: " + getValor() + "\n" +
				this.getPorta().toString();
	}


}

// CASA TESTE


public class CasaTeste {


	public static void main(String[] args) {

		Casa c1 = new Casa();
		c1.setCor("Azul");
		c1.setMaterial("Ferro");
		c1.setValor(250000);

		System.out.println(c1);

		Casa c2 = new Casa();
		c2.setCor("Azul");
		c2.setMaterial("Madeira");
		c2.setValor(250000);

		System.out.println(c2);
		System.out.println(c1.equals(c2));

		Porta p = new Porta();
		c1.setPorta(p);
		c1.getPorta().abrir();
		System.out.println(p);

	}

}

// PUBLIC CLASS PORTA

public class Porta {

	private double largura;
	private double altura;
	boolean aberta;

	public double getLargura(){
		return this.largura;
	}
	public void setLargura(double largura){
		this.largura = largura;
	}

	public double getAltura(){
		return this.altura;
	}

	public void setAltura(double altura){
		this.altura = altura;
	}

	public boolean isAberta(){
		return this.aberta;
	}

	public boolean abrir(){
		return aberta = true;
	}


	public boolean fechar(){
		return aberta = false;
	}

	public String toString(){
		return "Largura: " + getLargura() + "\n" + 
				"Altura: " + getAltura() + "\n" +
				"Aberta: " + isAberta();
	}

}

// PORTA TESTE


public class PortaTeste {

	public static void main(String [] agrs){

		Porta p1 = new Porta();
		Porta p2 = new Porta();

		p1.setAltura(10);
		p1.setLargura(2);

		p2.setAltura(5);
		p2.setLargura(1);

		System.out.println(p1);
		p1.abrir();

		System.out.println(p1);


	}
}

Desculpem a quantidade de códigos, sou novo no forum não manjo muito o padrão dos tópicos e não vi a possibilidade de coloca em spoilers…

Bom agradeço qualquer ajuda

Entendam que qualquer comentário não é dispensável, por gentileza qualquer coisa que tenham a falar ou esclarecer será de grande ajuda, pois estou meio cego nessa matéria.

o erro que apareceu é esse:
Exception in thread “main” java.lang.NullPointerException
at Casa.toString(Casa.java:55)
at java.lang.String.valueOf(Unknown Source)
at java.io.PrintStream.println(Unknown Source)
at CasaTeste.main(CasaTeste.java:15)

Boa tarde,

Você pede p/exibir a casa só que não seta a porta, logo dá NullPointerException…

                Porta p = new Porta();
		System.out.println(p);

                Casa c1 = new Casa();
		c1.setCor("Azul");
		c1.setMaterial("Ferro");
		c1.setValor(250000);
                c1.setPorta(p);
		c1.getPorta().abrir();                
 
		System.out.println(c1);

		Casa c2 = new Casa();
		c2.setCor("Azul");
		c2.setMaterial("Madeira");
		c2.setValor(250000);
                c2.setPorta(p);
		c2.getPorta().abrir();                 
		System.out.println(c2);

		System.out.println(c1.equals(c2));
		

e o metodo equals está errado o parametro é Object…

public boolean equals(Object outraCasa){  
        Casa casa2=(Casa)outraCasa;

        if (this.getCor().equals(casa2.getCor()) &&  
                this.getMaterial().equals(casa2.getMaterial()) &&  
                this.getValor() == casa2.getValor())  
            return true;  
        else  
            return false;  
    } 

Falow

[quote=BTO]Boa tarde,

Você pede p/exibir a casa só que não seta a porta, logo dá NullPointerException…

                Porta p = new Porta();
		System.out.println(p);

                Casa c1 = new Casa();
		c1.setCor("Azul");
		c1.setMaterial("Ferro");
		c1.setValor(250000);
                c1.setPorta(p);
		c1.getPorta().abrir();                
 
		System.out.println(c1);

		Casa c2 = new Casa();
		c2.setCor("Azul");
		c2.setMaterial("Madeira");
		c2.setValor(250000);
                c2.setPorta(p);
		c2.getPorta().abrir();                 
		System.out.println(c2);

		System.out.println(c1.equals(c2));
		

e o metodo equals está errado o parametro é Object…

public boolean equals(Object outraCasa){  
        Casa casa2=(Casa)outraCasa;

        if (this.getCor().equals(casa2.getCor()) &&  
                this.getMaterial().equals(casa2.getMaterial()) &&  
                this.getValor() == casa2.getValor())  
            return true;  
        else  
            return false;  
    } 

Falow[/quote]

Valeu cara, esse código já esta corrigido??

Eu, pra te falar a verdade não entendi certo…

No metodo toString() você está chamando o metodo toString() da porta. A porta não foi inicializada naquele momento. Para arrumar isso, crie um construtor sem argumentos e instancia o atributo porta dentro dele.

Boa tarde,

Então quando pedia p/exibir na linha 11 e 18 do antigo código

       Casa c1 = new Casa();  
        c1.setCor("Azul");  
        c1.setMaterial("Ferro");  
        c1.setValor(250000);  
        
        //exibição c1 ou seja toString() c1
        System.out.println(c1);  
  
        Casa c2 = new Casa();  
        c2.setCor("Azul");  
        c2.setMaterial("Madeira");  
        c2.setValor(250000);  
        
        //exibição c2 ou seja toString() c2
        System.out.println(c2);  

Lá no toString da classe Casa dava o erro

public String toString(){  
        return  "Cor: " + getCor() + "\n" +   
                "Material: " + getMaterial() + "\n" +  
                "Valor: " + getValor() + "\n" + 
 
                this.getPorta().toString();//por causa desta linha, a porta não foi setada , a referencia é null, logo causa o erro NullPointerException  
    }  

Enquanto ao equals é um metodo que é herdado de Object, quando cria qualquer objeto, ele automaticamente
herda Object, ai faltou escrever de maneira certa, com parametro Object.

public boolean equals(Object outraCasa){ 
       //fiz um Casting p/ converter Object em Casa 
        Casa casa2=(Casa)outraCasa;  
  
        if (this.getCor().equals(casa2.getCor()) &&    
                this.getMaterial().equals(casa2.getMaterial()) &&    
                this.getValor() == casa2.getValor())    
            return true;    
        else    
            return false;    
    }  

Valeu perfect!