Exercício Caelum

1 resposta
T

Boa tarde,

Eu estou fazendo um exercício da apostila FJ11 da Caelum que diz o seguinte:

Programa 3
Classe: Casa Atributos: cor, porta1, porta2, porta3 Método: void pinta(String s), int quantasPortasEstaoAbertas()
Crie uma casa e pinte-a. Crie três portas e coloque-as na casa; abra e feche as mesmas como desejar.
Utilize o método quantasPortasEstaoAbertas para imprimir o número de portas abertas.

Eu já tinha criado uma classe Porta em um exercício anterior, então procurei reutilizar a mesma. Abaixo estão as classes que criei:

public class Porta {
    public boolean aberta;
    private String cor;
    public int portaAberta;
    double dimensaoX;
    double dimensaoY;
    double dimensaoZ;
        
    public void abre(){
        if(aberta != true){
            this.aberta = true;
            portaAberta++;
            System.out.println("Abrindo porta "+portaAberta);
        }
    }
    
    public void fecha(){
        if(aberta != false){
            this.aberta = false;
            portaAberta--;
            System.out.println("Fechando porta "+portaAberta);
        }
    }            
    
    public void pinta(String s){
        this.cor = s;
        System.out.println("A porta é da cor "+ cor);
    }
    
    public boolean estaAberta(){
        return aberta;
    }
    
    public void Mostra(boolean _aberta){
        this.aberta = _aberta;
        if(this.aberta == true){
            System.out.println("A porta está aberta");
        }
        else {
            System.out.println("A porta está fechada");
        }
        System.out.print("\ndimensões:\nX: " + dimensaoX + "\nY: "
                         + dimensaoY + "\nZ: " + dimensaoZ + "\n");
    }
}
public class Casa {
    String cor;
    Porta porta;
    int portas;
    
    public void pinta(String s){
        cor = s;
    }
    
    public int quantasPortasEstaoAbertas(int q){
        portas = q;
        return portas;
    }

    public void mostraPorta(int i){
        portas = i;
        System.out.println(portas+" portas estao abertas");
    }
}
public class Principal {
    public static void main(String[] args) {
        Casa casa = new Casa();
        Porta porta1 = new Porta();
        Porta porta2 = new Porta();
        casa.porta = porta1;
        casa.porta = porta2;
        porta1.abre();
        porta1.fecha();
        porta1.abre();
        porta2.abre();
        casa.mostraPorta(casa.porta.portaAberta);
    }
}

Resultado:
Abrindo porta 1
Fechando porta 0
Abrindo porta 1
Abrindo porta 1
1 portas estao abertas

Não entendi como posso usar o método quantasPortasEstaoAbertas(int) para imprimir o número de portas abertas.
O problema é que o resultado deveria mostrar que 2 portas estão abertas, mas o programa considera a variável "portaAberta" diferente para cada objeto do tipo Porta que foi criado. Como faço?

1 Resposta

Lenin666

Põe static na var portaAberta q vc tem o resultado esperado…

Mas tenta entender pq eu sugeri d vc usar o static, existem outras soluções, mas no ex q vc passou, é a forma mais rápida e fácil de resolver seu prob.

Criado 2 de maio de 2012
Ultima resposta 2 de mai. de 2012
Respostas 1
Participantes 2