Dúvida sobre um exercício (Resolvi + Acho que tem outra forma de fazer...)

8 respostas
cgomesnet

Ola colegas

Eu estou seguindo a apostila do Caelum (parabéns Caelum, estou entendendo Java) e resolvi um exercício mas não do jeito que eles queriam pois criei mais um atributo na classe, abaixo irei mostrar a solução que encontrei para o mesmo, entretanto gostaria de saber de que forma vocês o fariam seguindo a risca o enunciado (sem complicar pois sou iniciante). Isso vai me servir de feedback para me corrigir já que não tenho conhecidos fora da internet para me ajudar.

Obrigado desde já

Enunciado do Exercício
Classe: Casa Atributos: cor, porta1, porta2, porta3 Método: void pinta(String s), int quantasPortasEstaoAbertas()

Crie a casa e pinte-a. Crite 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.

Minha Solução

Classe

public class Casa {
    String cor;
    Boolean porta1, porta2, porta3;
    int total;
    
    void pinta(String s) {        
        cor = s;
        System.out.println("A cor da casa é "+ cor);
    }
    
    int quantasPortasEstaoAbertas() {
       if (porta1 == true) {
           int p1 = 1;
           total = p1;
       }
       if (porta2 == true) {
           int p2 = 1;
           total = total + p2;
       }
       if (porta3 == true) {
           int p3 = 1;
           total = total + p3;
       }       
       return total;       
    }
}

Classe de Teste

public class CasaTeste {
    public static void main (String args[]){
        Casa c = new Casa();
        c.porta1 = true;
        c.porta2 = false;
        c.porta3 = true;   
        
        c.pinta("Azul");
        System.out.println("A qtde de portas abertas é " + c.quantasPortasEstaoAbertas());        
    }

}

8 Respostas

Ticianne

voce tambem pode fazer portas e cor serem setadas no construtor logo, tipo:

Casa c =  new Casa (red,true,true,false); //(na classe teste)

construtor:

public Casa (String color, bolean p1, bolean p2, bolean p3 )
{
    c=color;
   porta1=p1;
   porta2=p2;
  porta3=p3;

}

Assim voce atribui tudo de uma vez e usa melhor o conceito de objeto :wink: :wink:

Zeed01

Bom dia Colegas !

cgomesnet:

Acho que a idéia é você ter uma classe Porta com os atributos altura, largura, aberta (true ou false) que definem uma Porta.
Na classe Porta também teríamos um método para abrir e fechar a porta.

E na classe Casa nós teríamos os atributos do tipo Porta.

Você tem que pensar que Porta não é somente um campo ou atributo da Classe Casa, Porta é um objeto, ou seja ela existe indepentende da Casa.

Acho que seria algo ± assim:

/*
 * Porta.java
 *
 * Created on 3 de Abril de 2008, 12:07
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package caelumJ11;

/**
 *
 * @author r100320
 */
public class Porta {
    private int altura;
    private int largura;
    private boolean aberta;
    
    /** Creates a new instance of Porta */
    public Porta(int altura, int largura, boolean aberta) {
        this.altura = altura;
        this.largura = largura;
        this.aberta = aberta;
    }
    
    public void abre_fecha(boolean abre_fecha){
        this.aberta = abre_fecha;
    }
    
    public boolean isAberta(){
        return this.aberta;
    }
    
}
/*
 * Casa.java
 *
 * Created on 3 de Abril de 2008, 12:11
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package caelumJ11;

/**
 *
 * @author r100320
 */
public class Casa {
    private String cor;
    private Porta porta1, porta2, porta3;    
    
    /** Creates a new instance of Casa */
    public Casa(Porta porta1,Porta porta2,Porta porta3, String cor) {
        this.porta1 = porta1;
        this.porta2 = porta2;
        this.porta3 = porta3;
        this.cor = cor;
    }
    
    public void pinta(String cor) {
        this.cor = cor;
    } 
    
    public Porta getPorta1() {
        return this.porta1;
    }     
    
    public Porta getPorta2() {
        return this.porta2;
    }         
    
    public Porta getPorta3() {
        return this.porta3;
    }         

    public String getCor() {
        return this.cor;
    }             
    
    public int quantasPortasEstaoAbertas() {
        int portasabertas = 0;
        if (porta1.isAberta()) portasabertas++;
        if (porta2.isAberta()) portasabertas++;
        if (porta3.isAberta()) portasabertas++;
        return portasabertas;        
    }
}
/*
 * TestaCasa.java
 *
 * Created on 3 de Abril de 2008, 12:15
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package caelumJ11;

import javax.swing.JOptionPane;

/**
 *
 * @author r100320
 */
public class TestaCasa {
    
    public static void main(String arg[]){
        Porta porta1 = new Porta(10,10,false);
        Porta porta2 = new Porta(20,20,true);
        Porta porta3 = new Porta(30,30,true);
        Casa casa = new Casa(porta1, porta2, porta2, "Azul");
        
        casa.getPorta1().abre_fecha(true);
        casa.getPorta2().abre_fecha(true);
        casa.getPorta3().abre_fecha(true);
        
        JOptionPane.showMessageDialog(null, "Cor: " + casa.getCor() + "\n" + "Portas abertas: " + casa.quantasPortasEstaoAbertas());
        
        
        casa.pinta("Verde");
        casa.getPorta1().abre_fecha(false);
        casa.getPorta2().abre_fecha(false);
        casa.getPorta3().abre_fecha(false);
        
        JOptionPane.showMessageDialog(null, "Cor: " + casa.getCor() + "\n" + "Portas abertas: " + casa.quantasPortasEstaoAbertas());        
    }
    
}

Bom… acho que é isso.

[]s

cgomesnet

Obrigado pelo feedback pessoal.

J

E na classe Casa nós teríamos os atributos do tipo Porta.

Zeed01:

Olá,

estou iniciando em Java e acompanhando a mesma apostila.

Gostaria de saber:

É possível, neste caso, definir no construtor da classe Casa um array[] de referências a um objeto do tipo Porta?

Como declarar Casa passando estas referências como parâmetros?

Espero poder me ajudar.

OBS: Se eu estiver dizendo algo de errado, por favor, me corrija.

Balena

Sim é possível sim, aí você pode inclusive ter um número ilimitado de portas…
Você pode definir tanto um Porta[] como array, de tamanho defeinido com o um ArrayList que implementa outros conceitos, disponibiliza alguns métodos mais complexos, porém que facilitam a vida do programador…

Se você estiver interessado em ler um pouco mais sobre coleções comece pela documentação de classes do java, leia sobre a interface collection e sobre seus agregados como: ArrayList, Map, List, HashMap dentre outros…
comece por aqui:
http://java.sun.com/j2se/1.4.2/docs/api/index.html

E

Acho que o amigo ali fez um condigo complexo pra quem ta iniciando, eu peguei algumas ideias dele e atribui no meu programa:

public class Portas {
	String cor;
	boolean aberta;
	
	void abrir(){
		this.aberta = true;
		System.out.println();
	}
	
	void fechar(){
		this.aberta = false;
	}
	
	public boolean isAberta(){  
        return this.aberta;  
    }  

}

Aproveitei e fiz implementações abaixo;

public class Casa {
	String cor;
	Portas porta1, porta2, porta3;
	
	int qtsportasaberta(){
		int portasabertas = 0;  
        if (porta1.isAberta()) portasabertas++;  
        if (porta2.isAberta()) portasabertas++;  
        if (porta3.isAberta()) portasabertas++;
        System.out.println(portasabertas);
        return portasabertas;    
		
	}
	
	void abrirtodas(){
		porta1.aberta = true;
		porta2.aberta = true;
		porta3.aberta = true;
	}
	
	void fechartodas(){
		porta1.aberta = false;
		porta2.aberta = false;
		porta3.aberta = false;
	}

}
public class Programa {
	public static void main(String[] args){
		Casa minhacasa = new Casa();
		Portas p1 = new Portas();
		Portas p2 = new Portas();
		Portas p3 = new Portas();
		
		minhacasa.porta1 = p1;
		minhacasa.porta2 = p2;
		minhacasa.porta3 = p3;
		
		minhacasa.abrirtodas();
		
		minhacasa.qtsportasaberta();
		
	}

}

Acho que ficou mais limpo e mais facil de entender quem está iniciando =D

E

vish… topico é de 2008, nem tinha visto… bom fui pesquisar no google, estava em duvida, e achei isso aqui primeiro

drsmachado
cgomesnet:
Ola colegas

Eu estou seguindo a apostila do Caelum (parabéns Caelum, estou entendendo Java) e resolvi um exercício mas não do jeito que eles queriam pois criei mais um atributo na classe, abaixo irei mostrar a solução que encontrei para o mesmo, entretanto gostaria de saber de que forma vocês o fariam seguindo a risca o enunciado (sem complicar pois sou iniciante). Isso vai me servir de feedback para me corrigir já que não tenho conhecidos fora da internet para me ajudar.

Obrigado desde já

Enunciado do Exercício
Classe: Casa Atributos: cor, porta1, porta2, porta3 Método: void pinta(String s), int quantasPortasEstaoAbertas()

Crie a casa e pinte-a. Crite 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.

Minha Solução

Classe
public class Casa {
    String cor;
    Boolean porta1, porta2, porta3;
    int total;
    
    void pinta(String s) {        
        cor = s;
        System.out.println("A cor da casa é "+ cor);
    }
    
    int quantasPortasEstaoAbertas() {
       if (porta1 == true) {
           int p1 = 1;
           total = p1;
       }
       if (porta2 == true) {
           int p2 = 1;
           total = total + p2;
       }
       if (porta3 == true) {
           int p3 = 1;
           total = total + p3;
       }       
       return total;       
    }
}
Classe de Teste
public class CasaTeste {
    public static void main (String args[]){
        Casa c = new Casa();
        c.porta1 = true;
        c.porta2 = false;
        c.porta3 = true;   
        
        c.pinta("Azul");
        System.out.println("A qtde de portas abertas é " + c.quantasPortasEstaoAbertas());        
    }

}
Nem li o tópico, mas, sempre tem um jeito de fazer e um oriental (chinês, mongol, japonês, coreano, taiwanes, vietnamita ou qualquer um desses) faz 10 vezes mais rápido, 10 vezes melhor e se cobrar, 10 vezes mais barato.
Criado 3 de abril de 2008
Ultima resposta 24 de mai. de 2012
Respostas 8
Participantes 7