Boa noite! Sou novo por aqui e no mundo da programação também.
Estou estudando pelo livro da caelum fj-11e me estou quebrando a cabeça para resolver um exercício.
Ele diz para criar 3 portas e abrir e fechar elas como desejar e utilizar um método para imprimir quantas portas estão abertas. A parte de imprimir quantas portas estão abertas que eu não estou conseguindo. Segue o código que tenho até agora. Se alguém puder me ajudar… agradeço desde já.
public static void main(String [] args) {
Porta porta1;
porta1 = new Porta();
Porta porta2;
porta2 = new Porta();
Porta porta3;
porta3 = new Porta();
porta1.fechaPorta();
porta2.abrePorta();
porta3.abrePorta();
}
}
public class Porta {
boolean status;
int quantasPortasEstaoAbertas = 0;
void statusDaPorta(boolean status){
this.status = status;
if (status){
System.out.println("A porta esta aberta!");
} else {
System.out.println("A porta esta fechada!");
}
}
void abrePorta(){
this.statusDaPorta(true);
}
void fechaPorta(){
this.statusDaPorta(false);
}
coloca quantasPortasEstaoAbertas como static ai no método de abrir vc incrementa 1 e no de fechar decrementa 1
depois só criar um método pra retornar o valor
Primeiramente eu renomearia o atributo status para aberta, que é justamente o que ele representa.
Depois eu mudaria o atributo quantasPortasEstaoAbertas para estático de forma que pertença à classe e não às instâncias.
Aí é só incrementar no método abrePorta() e decrementar no método fechaPorta().
Exemplo:
public class Exemplo {
public static void main(String[] args) {
Porta porta1 = new Porta();
Porta porta2 = new Porta();
Porta porta3 = new Porta();
porta1.fechaPorta();
porta2.abrePorta();
porta3.abrePorta();
System.out.println("Portas abertas: " + Porta.quantidadeAbertas());
System.out.println("Portas fechadas: " + Porta.quantidadeFechadas());
}
}
Classe Porta:
public class Porta {
private static int abertas;
private static int fechadas;
public static int quantidadeAbertas() {
return abertas;
}
public static int quantidadeFechadas() {
return fechadas;
}
private boolean aberta;
public Porta() {
aberta = false;
fechadas++;
}
public void abrePorta() {
if (!aberta) {
aberta = true;
abertas++;
fechadas--;
}
imprimeStatusDaPorta();
}
public void fechaPorta() {
if (aberta) {
aberta = false;
fechadas++;
abertas--;
}
imprimeStatusDaPorta();
}
private void imprimeStatusDaPorta() {
if (aberta) {
System.out.println("A porta esta aberta!");
} else {
System.out.println("A porta esta fechada!");
}
}
}
A troca do nome do atributo status para aberta foi uma boa! Não tinha pensado nisso. Ainda não aprendi o conceito de métodos estáticos…achava que só eram utilizados em variáveis(ex static double pi = 3.14). Vou dar uma pesquisada sobre métodos estáticos. Muito obrigado. Ajudaram bastante!
Membros estáticos (atributos, métodos ou classes) pertencem à classe e não aos objetos daquela classe.
Tudo o que é estático é acessível sem precisar ter uma instância da classe, é algo global.
No seu exemplo os métodos quantidadeAbertas() e quantidadeFechadas() retornam o valor dos atributos estáticos abertas e fechadas.
Porque retornar através de um método?
Porque senão os atributos teriam que ser públicos e sendo públicos eles ficam acessíveis à mudanças a partir de outras classes e isso não é legal.
Os atributos abertas e fechadas, embora sejam estáticos, são modificados pelas instâncias dos objetos.
Como eu faria para ter esse mesmo resultado sem usar um método estático?
Oque eu quis dizer é que a apostila tem um exercício para usar um conceito que ainda não foi ensinado na mesma.
ah… você fez um if para cada porta…também não tinha pensado nisso… eu estava tentando criar um metodo contador e incrementa ele a cada porta aberta…novamente obrigado!