Classes, métodos e variaveis private

10 respostas
Shponja

Então pessoal tudo bem? tenho uma nova dúvida.
No meu trabalho apareceu um exercicio que não estou a conseguir compreender porque estou com dificuldade em perceber a estruturação de vários métodos dentro de uma classe ccom variaveis private e outras coisas mais.
Se alguém me pode-se ajudar não dando a resposta mas explicando mesmo o porquê do resultado e qual o processo eu agradeço.

o exercicio é:
class Contador {
  private int modulo = 16;
  private int contagem;
  private Contador seguinte;

  public int valor() {
    return this.contagem;
  }
  public void ligaCom(Contador s) {
    this.seguinte = s;
  }
  public void incrementa() 
  {
    this.contagem = this.contagem + 1;
    if (this.contagem == this.modulo) 
    {
      this.contagem = 0;
      if (this.seguinte != null)
        this.seguinte.incrementa();
    }
  }
}

1. Indique a evolução das variáveis l.contagem e h.contagem durante a execução do troço de código seguinte. Justifique a resposta.

Contador h = new Contador(), l = new Contador();
  l.ligaCom(h);
  l.incrementa();
  while (l.valor() != 0)
    l.incrementa();

10 Respostas

marciofermino

amigo se vc nao conhecer a estrutua basica do java nao vai conseguir…

o ideal seria estudar,

podemos ate resolver , mais na proxima ja ira precisar de ajuda.

JonasZzZz

bom… um campo ser private aí ou não… não muda nada o resultado…

quando um campo é private a unica diferença é que ele não pode ser acessado de outra classe, só pode ser acessado pela classe que está a o campo… só isso…

e quanto aos métodos… sugiro você por esse código no Netbeans e fazer o debug… aí você entende melhor…

[]'s qlq coisa grita…

JonasZzZz

faz uma classe ContadorTest e põe isso…

public class ContadorTest(){
   public static void main(String args[]){  
      Contador h = new Contador(), l = new Contador();
      l.ligaCom(h);
      l.incrementa();
      while (l.valor() != 0)
      l.incrementa();
   }
}

aí… debug…

Shponja

obrigado vou tentar.
mas a minha duvida é essa mesmo, estudar!
eu não quero que me digam o resultado, eu quero que me expliquem para que eu perceba e consiga fazer o próximo sózinho.
vou tentar perceber com o debug.

Shponja

Bem já consegui perceber isso e já resolvi o exercicio mas tenho agora outras duas duvidas.

1-Se tiver o exercicio :
Justifique o erro de compilação identificado no seguinte método, supondo que zero não é membro da classe Contador, e sugira uma alternativa para implementar a operação.

public static void zero(Contador c){ c.contagem = 0; }
Como faço isso? Pensei que tenho de fazer uma nova classe e ir buscar a classe cotnador dentro da nova mas não sei bem, alguém pdoe ajudar?

2- Se tiver: Contador d= new Contador (15); o que representa o 15?
quando meto diz que Contador(int) não está definido, como posso fazê-lo?

Agradeço se alguém puder ajudar. Abraço

neoCortex

Shponja:
Bem já consegui perceber isso e já resolvi o exercicio mas tenho agora outras duas duvidas.

1-Se tiver o exercicio :
Justifique o erro de compilação identificado no seguinte método, supondo que zero não é membro da classe Contador, e sugira uma alternativa para implementar a operação.

public static void zero(Contador c){ c.contagem = 0; }
Como faço isso? Pensei que tenho de fazer uma nova classe e ir buscar a classe cotnador dentro da nova mas não sei bem, alguém pdoe ajudar?

Levando em conta que este código está em outra classe o problema será o fato do atributo estar privado na Classe Contador o que realmente não é um problema pois é o princípio do encapsulamento, isto é, atributos privados com métodos públicos para alteração e retorno dos valores dos atributos da Classe. Os famosos Get’s e Set’s mesmo que mascarados.

Se entendi bem, crie um método dentro desta classe Contador:

public void zeraContador(){
this.contagem = 0;
}

Daí vc chamaria assim:

Contador c = new Contador();
.
.
.
   c.zeraContador();

Neste caso vc está atribuíndo um parâmetro no construtor da classe no momento da criação do objeto fica assim:

class Contador {  
  private int modulo = 16;  
  private int contagem;  
  private Contador seguinte;  

  public Contador(int valor){
 this.contagem = valor;
}
//Sobrecarga no construtor caso seja interessante não passar parâmentro algum
 public Contador(){
}

  public int valor() {  
   return this.contagem;  
  }  
   public void ligaCom(Contador s) {  
   this.seguinte = s;  
   }  
   public void incrementa()   
   {  
    this.contagem = this.contagem + 1;  
     if (this.contagem == this.modulo)   
    {  
     this.contagem = 0;  
     if (this.seguinte != null)  
      this.seguinte.incrementa();  
    }  
   }  
 }

Quando você cria um objeto então chama a classe “Contador” atribui um nome para ele “c” usa o operarador “=” depois o criador “new” e em seguida chama o construtor dessa classe “Contador()”. Ficando então:

Contador c = new Contador();

Fui!!

Um grande Abraço!

Shponja

Hmmmm acho que entendi, vou tentar perceber isso bem e depois digo se ja esta feito ou se tenho novas duvidas.
Obrigado Abraço

Shponja

Já consegui e percebi o primeiro. Obrigado

Shponja

Tentei fazer o segundo mas como estava na resposta, eu preciso de meter valor no Contador d mas não nos outros e assim continua a dar erro. Abraço

Shponja

ok já resolvi o problema, obrigado pela ajuda =)
abraço

Criado 17 de dezembro de 2008
Ultima resposta 18 de dez. de 2008
Respostas 10
Participantes 4