O que tem de errado nesse exercicio?

Estou iniciando em java e peguei alguns exercicios para praticar…
mais tem um que está me queimando os neuronios…

o que tem de errado nesse código, por que eu não consigo referenciar o vetor porta setando valores?

classe Casa

public class Casa {
	private String cor;
	private boolean porta[] = new boolean[3];	
	
	public String getCor() {
		return cor;
	}
	
	public void pinta(String cor) {
		this.cor = cor;
	}
	
	public void setPorta(boolean porta[]) {
		this.porta = porta;
	}

	public boolean[] getPorta() {
		return porta;
	}
	
	public void quantasPortasEstaoAbertas() {
		int x=0;
		for (int i = 0; i < this.getPorta().length; i++) {
			if (this.getPorta()[i] = true) { x+=1; }			
		}
		System.out.println("Número de portas abertas: " + x);
	}
	

}

Classe TesteCasa


public class TesteCasa {
	public static void main(String[] args) {
		
		Casa casa = new Casa();		
		casa.pinta("Vermelho");		
		System.out.println("Cor " + casa.getCor());
		
		casa.setPorta()[0] = true;
		casa.setPorta()[1] = false;
		casa.setPorta()[2] = true;
		
		casa.quantasPortasEstaoAbertas();
		
		
		Casa casa1 = new Casa();
		casa1.pinta("Azul");		
		System.out.println("Cor " + casa1.getCor());
		
		casa1.setPorta()[0] = false;
		casa1.setPorta()[1] = true;
		casa1.setPorta()[2] = false;
		
		
		casa1.quantasPortasEstaoAbertas();
		
		
	}

}

a minha dúvida é exatamente essa como criar get e set para array e como referencia-los estando em outra classe.

valeu :wink:

Cara, já estou de partida para ver o jogo do Brasil, mas vou tentar te ajudar bem rápido.

Quando você faz o set em um array vc está setando o array.

[code]String[] teste = new String[3]

seuObj.setSeuArray(teste)[/code]

Caso você queira setar diretamente um dos elementos do array ou captura-lo, sobrecarregue o get e set desse cara, tipo:

seuObj.setSeuArray(1, "xpto"); seuObj.getSeuArray(1);

e cuidado! Isso está errado:

if (this.getPorta()[i] = true) { x+=1; }

Toscamente deveria ser feito assim:

if (this.getPorta(i) == true) { x+=1; }

ou, elegantemente, assim:

if (this.getPorta(i)) { x+=1; }

Dá uma refletida nisso que te falei e deve ficar claro. Se não ficar, quando chegar em casa (ou no intervalo do jogo) tento explicar melhor.

Obs: Você não precisa usar getters e setters para acessar um atributo de dentro da própria classe.

Abraços.

eu acho que meus metodos get e set do array porta está errado… por que quando eu uso setPorta dentro do TesteCasa ele não consegue referenciar a variavel dentro da classe Casa. =/ como seria um metodo setPorta sobrecarregado?

E eu nem percebi que eu tava colocando um get aqui dentro da propria classe, private é visivel apenas dentro da classe onde ela é declarada não sei por que eu coloquei aquele get ali :?

Como faço para referenciar um elemento do array usando o metodo set de porta…

casa.setPorta(1, true); 

assim não funcionou

Cara,
Você terá de mudar a implementação do seu método assim:

  public void setPorta(int i, boolean port) {  
         this.porta[i] = port;  
     }  

Entendido?

Engraçado que eu tinha feito igual esse metodo michell, mas eu achei que estava dando errado porque o metodo quantasPortasEstaoAbertas() estava escrito errado e estava sempre aparecendo true em todos os elementos do array… agora ficou certinho… tenho que praticar mais isso, metodos sobrecarregados e orientação a objeto to muito preso a modo estruturado ainda. valeu gente obrigado pelas dicas

public class Casa {
	private String cor;
	private boolean porta[] = new boolean[3];	
	public String getCor() {
		return cor;
	}	
	public void pinta(String cor) {
		this.cor = cor;
	}	
	public void setPorta(int i, boolean porta) {
		this.porta[i] = porta;
	
	}	
	public void quantasPortasEstaoAbertas() {
		int x=0;
		for (int i = 0; i < porta.length; i++) {
			if ( porta[i]) { x+=1; }			
		}
		System.out.println("Número de portas abertas: " + x);
	}
}

public class TesteCasa {
	public static void main(String[] args) {
		
		Casa casa = new Casa();
		casa.pinta("Vermelho");		
		System.out.println("Cor " + casa.getCor());		
		casa.setPorta(0, true);
		casa.setPorta(1, false);
		casa.setPorta(2, true);		
		casa.quantasPortasEstaoAbertas();		
		
		Casa casa1 = new Casa();
		casa1.pinta("Azul");		
		System.out.println("Cor " + casa1.getCor());		
		casa1.setPorta(0, false);
		casa1.setPorta(1, true);
		casa1.setPorta(2, false);		
		casa1.quantasPortasEstaoAbertas();		
	}
}

Só para deixar claro, já que você está querendo aprender sobrecarga.

O que você fez não foi uma sobrecarga.

Se você tivesse mantido o método setter default e fizesse o “novo”, aí sim seria uma sobrecarga.

public void setPorta(boolean[] porta) {  
         this.porta = porta;  
}

public void setPorta(int i, boolean porta) {  
         this.porta[i] = porta;  
}

Abraços.

Entendi, mas esse setter default ele ficaria sem ultilidade não é? pelo omenos eu não consegui fazer ele funcionar com os paremetros que eu passo no setter sobrecarregado.

Se tiver alguma função para esse default poderia me da um exemplo para ficar mais claro? mais um exemplo que seja do tipo setar um valor em uma posição de um determinado array.

:wink:

Ficaria sem utilidade para atribuir um valor numa determinada posição. Não para atribuir um array inteiro. Seria bom pensar que você mesmo, mais na frente, ou outro programador precise atribuir o array inteiro. Dessa forma:

Foo foo = new Foo();
		
String[] teste = new String[1];
teste[0] = "1";
		
foo.setXpto(teste);

Abraços