Contador para novas instancias

6 respostas
trainpotting

oi pessoal,

por favor

coloquei um contador para o numero de instancias de Conta criadas e nada do contador funcionar instanciando apenas o contrutor que permite acessar todos os metodos de Conta.
Só funcionou quando percebi que deveria instanciar a classe e nao o construtor.

Minha duvida é:
C ao instanciar o contrutor (uma obrigação) para compilar a classe consigo usar todos os demais metodos da classe, porque este nao pode ser usado para contar o numero de instancias da classe Conta?
Tem como o contador funcionar apenas ao instancir o construtor?
esta pergunta quase que responde a questao, pois uma coisa eh um construtor e outra e uma classe pois o contador conta apenas as instancias de classe...

mas ficou confuso na minha cabeça o fato do construtor permitir a criação de objetos Conta que permitem acesso aos metodos de Conta.
o construtor tem dupla funçao (construtor/classe)?

nao sei c fui claro, mas o que quiz dizer é que o objeto criado a partir do construtor me permite fazer tudo que faria se instanciasse a classe, ou nao??

ta confuso na minha cabeça :?

outra duvida mais basica mas nao consegui resolver ainda é quanto ao metodo
transfere();
que funfava e ao incrementar Conta mudando os modificadores e criar construtores nao consigo compilar/ insterpretar a saida do compilador. para resolver até poderia encontrar um codigo pronto no google mas o objetivo é compreender a solução do ponto de vista conceitual tb.

obrigado

class Conta {

  private static int totalDeContas;
  private int numero;
  private double saldo;
  private static double limite;
  private Cliente titular;

 /*
 	 essa parte nao compila:| antes de definir os atributos funfava mas nao sei
 	 prq nao compila mais e nao soube interpetrar o retorno do compilador

 	boolean transfere(Conta destino, double valor) {
   	 boolean retirou = Conta.titular.saca(valor);
    		if (retirou == false) {
      	return false;
    		} else {
    			destino.deposita(valor);
    			return true;
    }
  }
*/

  public Conta(Cliente titular, int numero, double limite)	{
	  this.limite = limite;
	  this.titular = titular;
	  this.numero = numero;
  }

  Conta() {
  Conta.totalDeContas = Conta.totalDeContas + 1;
  }
  public int getTotalDeContas() {
  return Conta.totalDeContas;
	}

  public double getSaldo() {
      return this.saldo + this.limite;
  }

  public Cliente getTitular()	{
	  return this.titular;
  }

  public double getLimite()	{
	  return Conta.limite;
  }

  public void setTitular(Cliente titular)	{
	  this.titular = titular;
  }

  public void deposita(double valor)	{
	  if	(valor > 0)	{
	  this.saldo += valor;
	  } else {
		  System.out.println("valor negativo nao aceito");
		  }
		  }

  public void saca(double valor)	{
	  if (valor > this.saldo + this.limite)	{
	  System.out.println("Estorou limite fio");
	  }	else {
		  this.saldo -= valor;
		  }
	  }


  public void mostra ()	{
	  System.out.println("numero " +this.numero);
	  System.out.println("titular " +this.titular.nome);
  	  System.out.println("saldo " +getSaldo());
  	  System.out.println(getTotalDeContas());
  }
}

6 Respostas

X

no metodo transfere:

boolean retirou = Conta.titular.saca(valor);

o que vc queria fazer com essa linha?

titular é um atributo que não é static e o metodo saca tb nao…

e tenta explicar a sua duvida novamente, ta mto confuso, n deu para entender

trainpotting

valew xxta,

na verdade aquele metodo foi uma das inumeras tentativas pra resolver e esqueci de manter o metodo original que nao compila como segue

obrigado

class Conta {

  private static int totalDeContas;
  private int numero;
  private double saldo;
  private static double limite;
  private Cliente titular;

  	 /*
 	 	essa parte nao compila :| antes de definir os atributos funfava mas nao sei
 	 	prq nao compila mais e nao soube interpetrar o retorno do compilador

	 */
	boolean transfere(Conta destino, double valor) {
	boolean retirou = this.saca(valor);
	if (retirou == false) {
	// não deu pra sacar!
	return false;
	}
	else {
	destino.deposita(valor);
	return true;
}
}


  public Conta(Cliente titular, int numero, double limite)	{
	  this.limite = limite;
	  this.titular = titular;
	  this.numero = numero;
  }

  Conta() {
  Conta.totalDeContas = Conta.totalDeContas + 1;
  }
  public int getTotalDeContas() {
  return Conta.totalDeContas;
	}

  public double getSaldo() {
      return this.saldo + this.limite;
  }

  public Cliente getTitular()	{
	  return this.titular;
  }

  public double getLimite()	{
	  return Conta.limite;
  }

  public void setTitular(Cliente titular)	{
	  this.titular = titular;
  }

  public void deposita(double valor)	{
	  if	(valor > 0)	{
	  this.saldo += valor;
	  } else {
		  System.out.println("valor negativo nao aceito");
		  }
		  }

  public void saca(double valor)	{
	  if (valor > this.saldo + this.limite)	{
	  System.out.println("Estorou limite fio");
	  }	else {
		  this.saldo -= valor;
		  }
	  }


  public void mostra ()	{
	  System.out.println("numero " +this.numero);
	  System.out.println("titular " +this.titular.nome);
  	  System.out.println("saldo " +getSaldo());
  	  System.out.println(getTotalDeContas());
  }
}
PBNETO

Bueñas!

Neste trecho, você tenta atribuir a um boolean, um método (que não retorna nada, pois é void)…

boolean retirou = this.saca(valor);

Para isso, altere o método “saca()” para uma função “saca()” que retorne boolean:

public boolean saca(double valor) { ... // return false ou true; } Abraços.

trainpotting

PBNETO

agora ta bombando :!: :smiley:

public boolean saca(double valor)	{
	  if (valor > this.saldo + this.limite)	{
	  return false;
	  }	else {
		  this.saldo -= valor;
		  return true;
		  }
	  }

Obrigado!!
Abraços!!

Conta
http://trainspotting.pastebin.com/d1796ac22
Teste
http://trainspotting.pastebin.com/f531046f9

X

:lol: que bom q deu certo ! :smiley:

abraço

trainpotting

fmz xxta,

obrigado camarada :!: :smiley:

abraço!

Criado 25 de julho de 2008
Ultima resposta 25 de jul. de 2008
Respostas 6
Participantes 3