Duvida de Iniciante

Iai galera do guj, vim aqui hj tentar achar uma solução para este pequeno impasse num código,é aquele sistema da caelum de casa … portas … e incrementei mais uma classe (quarto), no método quantDePortas, o código ta contando em dobro, pois so tem 3 portas criadas, e na interface resulta como 6 portas, este é meu primeiro posto, espero q entendam e me corrijam nos meus erros de programação e de post do tópico. Abraço

Código:

//Classe casa:

package RevisandoPOOcaelum;

public class Casa {

	String cor;
	int quantQuartos;
	int totalDePortas;
	Porta[] p = new Porta[3];
	Quarto [] q = new Quarto[2];
	int i = 0;
	int x = 0;
	boolean aberta;
	
	
		void pinta (String s){
		
		if (this.cor == s){
			
			System.out.println("A casa ja estar pintada desta cor!");
			
		}
		else {
			
			this.cor = s;
			System.out.println("A casa foi pintada da cor: " +cor);
		}
	}
	
		void adicionaPorta(Porta port) {    
			   if (totalDePortas < p.length) {    
			      p[totalDePortas] = port;    
			totalDePortas++;    
			   }     
			   else {    
			      System.out.println("Array cheia");    
			   }    
			}   		
		
		void adicionaQuarto (Quarto novoQuarto){
			
			if (quantQuartos < q.length) {    
			      q[quantQuartos] = novoQuarto;    
			quantQuartos++;    
			   }     
			   else {    
			      System.out.println("Array cheia");    
			   }    
			}   		
		
		
		void abre(){
			
			if (this.aberta != false){
				
				System.out.println("A porta ja se encontra aberta!");
			}
			else{
				
				this.aberta = true;
				System.out.println("Abrindo a porta!");
			}
		}
		
        void quantPortasAbertas (){
			
			int i = 0; int contPortas = 0;
			for (i = 0; i < p.length; i++){
				
				if (this.p[i].aberta == true){
					
				contPortas += 1;	
        		
        		}
			}
			
		System.out.println("Existem " + contPortas + " portas abertas!");
	}
				
		int quantDePortas() {
					
					for (int i = 0; i < p.length; i++){
						 if (p [i] != null) {  
				                totalDePortas += i;  
				            }  
						 
						}  
						System.out.println("Total de portas: " +totalDePortas);
				        return totalDePortas;  
				    }  
		
			
		void fecha(){
		
			if (this.aberta == true){
				
				this.aberta = false;
				System.out.println("Fechando a porta!");
			}
			else{
				
				System.out.println("A porta ja se encontra fechada!");
			}
		}	

		/*int quantQuartos(){
			
			for (int x = 0; x < this.q.length; x++){
				
				int contQuartos = 0;
				if (this.q[x] != null){
					
				  quantQuartos += x;
				  
				}
				System.out.println("Quantidade de quartos: "+ quantQuartos);
				return quantQuartos;
			}
			
		}
*/

}
		
// TesteCasa:

package RevisandoPOOcaelum;

public class TesteCasa {
	
	public static void main (String args[]){
		
		Casa casa = new Casa();
		Porta p1 = new Porta();
		Porta p2 = new Porta();
		Porta p3 = new Porta();
		Quarto q1 = new Quarto();
		Quarto q2 = new Quarto();
		
		//Não é mais necessario pois foi adicionado o método: Adicionar Porta.
		
	   /*casa.p [0] = p1;
		casa.p [1] = p2;
		casa.p [2] = p3;
		casa.q [0] = q1;
		casa.q [1] = q2;
		*/
		
		casa.pinta ("branca");
		casa.adicionaPorta(p1);
		p1.aberta = false;
		p1.cor = ("verde");
		p1.tipo = ("Madeira");
		casa.adicionaPorta(p2);
		p2.aberta = true;
		p2.cor = ("Azul");
		p2.tipo = ("PVC");
		casa.adicionaPorta(p3);
		p3.aberta = false;
		p3.cor = ("Preta");
		p3.tipo = ("Madeira");
		casa.adicionaQuarto(q1);
		casa.adicionaQuarto(q2);
		q1.tamanho = ("10 metros²");
		q1.suite = true;
		q1.Ehsuite();
		q2.suite = false;
		q2.tamanho = ("8 metros²");
		q2.Ehsuite();
		p1.abre();
		p2.abre();
		casa.pinta("Cinza");
		casa.quantDePortas();
		casa.quantPortasAbertas();
	}
// classe Porta:

package RevisandoPOOcaelum;

public class Porta {

	boolean aberta;
	String cor;
	String tipo;
	
	void abre(){
	
		if (this.aberta != true){
			
			this.aberta = true;
			System.out.println("Abrindo a porta!");
		}
		else{
			
			System.out.println("A porta ja se encontra aberta!");
		}
	}
	
	void fecha(){
		
		if (this.aberta != false){
			
			this.aberta = false;
			System.out.println("Fechando a porta!");
			
		}
		System.out.println("A porta ja se econtra fechada!");
		
	}
	
	void pinta (String c){
		
		if (this.cor == c){
			
			System.out.println("A porta ja estar pintada desta cor!");
			
		}
		else {
			
			this.cor = c;
			System.out.println("A porta foi pintada da cor: " +cor);
		}
	}
	
	boolean estaAberta (){
	  
	        if (this.aberta == true) {  
	            System.out.println("Porta aberta");  
	        } else {  
	            System.out.println("Porta fechada");  
	        }  
	        return false;

	
	}
	
	
}
	

Por favor, poste seu código com as tags [code]

        if (this.cor == s){  

Em Java infelizmente o sinal de “==” não compara direito duas strings. No seu caso, você precisa usar equals:

        if (this.cor.equals (s)){  

Não sei se esse é o seu problema, mas como esse é um erro muito óbvio, pode estar causando os outros problemas.

   if (this.cor == s){    

Em Java infelizmente o sinal de “==” não compara direito duas strings. No seu caso, você precisa usar equals:

    if (this.cor.equals (s)){    

no java 7 isto já e possivel rapaziada…

[]s

uma coisa que reparei é que no método adicionaQuarto

a quantQuartos é somada:

void adicionaQuarto (Quarto novoQuarto){  
              
            if (quantQuartos < q.length) {      
                  q[quantQuartos] = novoQuarto;      
            quantQuartos++;      
               }       
               else {      
                  System.out.println("Array cheia");      
               }      
            }

o mesmo ocorre na contagem…

E o que deveria ser feito neste caso?

Cara roda seu programa em debug, poe os breaks que provavelmente você mesmo vai achar o erro, debugando você vai ver exatamente o que o programa esta fazendo, as vezes o que achamos que ele esta fazendo, em tempo de execução muda, por detalhes que passam despercebidos. Olhando por cima só vi os erros de comparação de string mesmo…

[]'s

int quantQuartos(){

apenas retorne o valor da int

int quantQuartos(){ return quantQuartos; }

o mesmo para a parte de portas…

funciona ?

Você tem que definir onde precisa ser contado o quarto. Na hora de adicionar ou só na hora da contagem? se realmente precisar contar quando add a porta, cria outra variável para isso. Ou zera a que foi incrementada na hora de fazer a contagem.

[]'s

Ou realmente esquece esse metodo que faz contagem. se ja incrementa a variavel quando add, é só retornar o valor mesmo dando um get nele como sugeriu o gejava.

[]'s

como você ainda não esta trabalhando com encapsulamento basta retornar

System.out.println(obj.quantQuartos);

acredito que isso fara mais sentido quando começar a ver getters e setters

Não entendi porque você criou dois atributos “aberta” do tipo booleano um na Classe Casa e outro na Classe Porta.
Como todo o código se refere a porta em si e seus estados o atributo “aberta” da classe Casa pode ser deletado.

Se quiser postar o exercicio aqui eu posso tentar dar uma explicação mais direta ao que você precisa entender…