Java basico erro

Galera ainda estou estudando java, eu vi um exercicio e tava fazendo, cheguei na ultima parte e fiz mas da dando errado ai estou postando para ver se alguem me ajuda!

public class Casa2 {

	public String cor;
	public int totalPortas;
	public Porta[] portas;
	
	public void pinta(String s){
		cor = s;
	}
	
	public void adicionaPortas(Porta p){
		for (int i = 0; i < portas.length; i++) {
			portas[i] = p;
		}
	}
	
	public int totalDePortas(){
		return portas.length;
	}
	
	public int qntsPortasEstaoAbertas(){
			
		for (int i = 0; i < portas.length; i++) {
			if(portas[i].estaAberta() == true){
			totalPortas = totalPortas + 1;
			}
		
		}
		
		return totalPortas;
		
	}
}

public class Porta {

	public boolean aberta;
	public String cor;
	public double dimensaoX;
	public double dimensaoY;
	public double dimensaoZ;
	
	public void abre(){
		aberta = true;
	}
	
	public void fecha(){
		aberta = false;
	}
	
	public void pinta(String s){
		cor = s;
	}
	
	public boolean estaAberta(){
		return aberta;
	}
}

public class Teste6 {

	public static void main(String[] args) {
		
		Casa2 casa = new Casa2();
		casa.pinta("Vermelho");
		
		Porta p1 = new Porta();
		Porta p2 = new Porta();
		Porta p3 = new Porta();
		
		casa.portas = new Porta[3];
	
		p1.abre();
		p2.fecha();
		p3.abre();
		
		casa.adicionaPortas(p1);
		casa.adicionaPortas(p2);
		casa.adicionaPortas(p3);
		
		System.out.println(casa.qntsPortasEstaoAbertas());
		System.out.println(casa.totalDePortas());
		
	}
}

O Erro todo é na parte onde mostra a quantidade de portas abertas nunca bate o valor certo ja mudei q só, qual o problema??

Pode ser porque você não está zerando o total de portas no inicio…

Qdo vc usa contadores em qualquer linguagem é uma boa prática definir um valor inicial para eles… exemplo

[code] public int qntsPortasEstaoAbertas(){
totalPortas = 0;
for (int i = 0; i < portas.length; i++) {
if(portas[i].estaAberta() == true){
totalPortas = totalPortas + 1;
}

     }  
       
     return totalPortas;  
       
 }[/code]

Espero ter ajudado.

:smiley:

O erro ta aqui


	public void adicionaPortas(Porta p){
		for (int i = 0; i < portas.length; i++) {
			portas[i] = p;
		}
	}
	

vc está colocando a ultima porta que vc está passando em todas as posições do vetor.

De uma consertada na sua lógica, vc vai ter que controlar qual a ultima posição utilizada no seu vetor, e ai colocar a porta nessa posição.

Fora isso, esse monte de atributo público ta muito ruim, coloque como privado, e crie métodos pra inicializar eles (caso do vetor porta), assim vc tem mais controle.

se tiver mais dúvidas, posta ae…
[]s

Olá,

no método adicionaPortas você sempre adiciona a última porta a todas as posições do array.

Amigo em meu site vc pode encontrar respostas para seu problema,
lá voce encontra um sistema para download
bem como informações sobre treinamentos;

http://prologicasistemas.fortunecity.com