Duvida - metodo boolean - Apostila Caelum

Ola!
Estou dando meus primeiros passos em Java e agarrei em uma duvida… Preciso de uma ajudinha!! :wink:

Exercicio 2 - Cap 4 - Caelum

Tenho que criar o metodo que seja BOOLEAN, eu vi uma duvida aqui no forum e a solucao dada foi criar ele como String, porem nao pode…!

Meus problemas:

1 - do jeito que o codigo esta aqui, esta rodando porem nao aparece se a porta esta aberta ou nao ao rodar o programa…

2 - se tiro o else todo do metodo estaAberta, aparece um erro: “missing return statement”


public class C43Porta {
boolean aberta;
String cor;
double dimensaoA;
double dimensaoL;
double dimensaoP;

void abre(){
  if ( this.aberta == false){
    this.aberta = true;
    System.out.println("Sua porta esta aberta agora!");
  } 
}

void fecha(){
  if ( this.aberta == true){
    this.aberta = false;
    System.out.println("Sua porta esta fechada agora!");
  } 
}

void pinta(String s){
  String antes = this.cor;
  this.cor = s;
  System.out.println("Sua porta era: " + antes + " agora que a pintamos, ficou: " + this.cor + ".");
}	

boolean estaAberta() {
	if (this.aberta == true) {
		System.out.println("Porta aberta.");
		return true;
	} else {
		System.out.println("Porta fechada.");
		return false;
	}
}

}

public class C43TestaPorta {
public static void main (String [] args){

System.out.println("Informacoes de sua porta: \n");

C43Porta p = new C43Porta();

p.aberta = false;
p.cor = "Vermelha";
p.dimensaoA = 2;
p.dimensaoL = 4.5;
p.dimensaoP = 1;
p.abre();
p.pinta("azul");
p.pinta("rosa");
System.out.println("Dimensoes --- Alt: " + p.dimensaoA + " | Larg: " + p.dimensaoL + " | Profundidade: " + p.dimensaoP);  
p.estaAberta(); //imaginava que aqui fosse aparecer a informacao de porta aberta, mas nao aparece

}
}

Não sei se atende a necessidade pois não entendi:

Alterações:

public class C43Porta {

    private boolean aberta;
    private String cor;
    private double dimensaoA;
    private double dimensaoL;
    private double dimensaoP;

    public C43Porta(String cor, double dimensaoA, double dimensaoL, double dimensaoP) {
        this.cor = cor;
        this.dimensaoA = dimensaoA;
        this.dimensaoL = dimensaoL;
        this.dimensaoP = dimensaoP;
    }

    public double getDimensaoA() {
        return dimensaoA;
    }

    public double getDimensaoL() {
        return dimensaoL;
    }

    public double getDimensaoP() {
        return dimensaoP;
    }
    
    public void setDimensaoA(double dimensaoA) {
        this.dimensaoA = dimensaoA;
    }

    public void setDimensaoL(double dimensaoL) {
        this.dimensaoL = dimensaoL;
    }

    public void setDimensaoP(double dimensaoP) {
        this.dimensaoP = dimensaoP;
    }
    

    public void abrir() {
        aberta = true;
        System.out.println("A porta foi aberta.");
    }

    public void fechar() {
        aberta = false;
        System.out.println("A porta foi fechada.");
    }

    void pintar(String cor) {
        System.out.println("A porta era " + this.cor.toLowerCase() + ", mas foi pintada e agora é " + cor.toLowerCase() + ".");
        this.cor = cor;
    }

    boolean estaAberta() {
        System.out.println("A porta está "+(aberta ? "aberta." : "fechada."));
        return aberta;
    }

}

Alterações no método main:

    public static void main(String args[]) {
        C43Porta porta = new C43Porta("Vermelha", 2, 4.5, 1);
        porta.abrir();
        porta.pintar("azul");
        System.out.println("Detalhes da porta:\nAltura: " + porta.getDimensaoA() + ";\nLargura: " + porta.getDimensaoL() 
                + ";\nProfundidade: " + porta.getDimensaoP()+".");
        porta.estaAberta(); 
    }

Executei seu programa sem alterar nada e aparece sim, veja:

Sua porta esta aberta agora!
Sua porta era: Vermelha agora que a pintamos, ficou: azul.
Sua porta era: azul agora que a pintamos, ficou: rosa.
Dimensoes --- Alt: 2.0 | Larg: 4.5 | Profundidade: 1.0
Porta aberta. // Aqui está a mensagem apresentada pelo método estaAberta

Dica para melhorar seus códigos:
Não escreva dessa forma:

if ( condicao == true ) {
    // faz algo
}

if ( condicao == false ) {
    // faz algo
}

Ao invés disso escreva:

if ( condicao ) {
    // faz algo
}

if ( !condicao ) {
    // faz algo
}

Outra situação é com métodos que retornam boolean o método abaixo por exemplo:

boolean estaAberta() {
	if (this.aberta == true) {
		System.out.println("Porta aberta.");
		return true;
	} else {
		System.out.println("Porta fechada.");
		return false;
	}
}

Pode ser escrito de forma mais simples:

boolean estaAberta() {
	if ( aberta ) {
		System.out.println("Porta aberta.");
	} else {
		System.out.println("Porta fechada.");
	}
	return aberta;
}

Ou mais simples:

boolean estaAberta() {
	if ( aberta ) {
		System.out.println("Porta aberta.");
		return true;
	}
	System.out.println("Porta fechada.");
	return false;
}

Ou mais simples ainda:

boolean estaAberta() {
	System.out.println( aberta ? "Porta aberta." : "Porta fechada." );
	return aberta;
}

Realmente bem mais simples!! Muuuuuito obrigada!!!