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á.
voidstatusDaPorta(booleanstatus){
this.status=status;if(status){
System.out.println("A porta esta aberta!");}else{
System.out.println("A porta esta fechada!");}
}
voidabrePorta(){
this.statusDaPorta(true);
}
voidfechaPorta(){
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
staroski
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().
publicclassPorta{privatestaticintabertas;privatestaticintfechadas;publicstaticintquantidadeAbertas(){returnabertas;}publicstaticintquantidadeFechadas(){returnfechadas;}privatebooleanaberta;publicPorta(){aberta=false;fechadas++;}publicvoidabrePorta(){if(!aberta){aberta=true;abertas++;fechadas--;}imprimeStatusDaPorta();}publicvoidfechaPorta(){if(aberta){aberta=false;fechadas++;abertas--;}imprimeStatusDaPorta();}privatevoidimprimeStatusDaPorta(){if(aberta){System.out.println("A porta esta aberta!");}else{System.out.println("A porta esta fechada!");}}}
C
c_y_o
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!
Solucao aceita
staroski
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.
C
c_y_o
Não poderia usar o private?
staroski
Se não quiser acessar de fora da classe, pode.
C
c_y_o
Staroski, obrigado pela explicação! Só achei estranho um exercício na apostila sendo que ainda não foi falado sobre isso.
staroski
Existem N formas de resolver um problema.
Em nenhum momento foi dito que não era pra usar membros estáticos.
C
c_y_o
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.
staroski
Na classe onde instanciou as portas, poderia ter contadores.
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!