Bem, estou com o seguinte problema:
Tenho um programa que cria contas, cada conta e um objeto
que é colocado na lista de contas, mas eu não estou conseguindo modificar
o saldo. Meu objeto conta tem um método realizaSaque que verifica se
a subtração do saldo com o saque é negativa, caso for não é permitido
realizar o saque pois o saldo é insuficiente, mas se for possível
eu chamo o método setSaldo que seta o novo valor do saldo, mas quando
chamo esse método acontece um erro.
O fonte da minha classe conta está logo abaixo:
package modulo03Lab.exercicio01;
import java.util.*;
public class Conta
{
private long numero;
private byte digitoVerificador;
private double saldo;
private Calendar dataCriacao;
private static ArrayList<Conta> conta;
private int i;
public Conta(long numero,double saldo) throws Exception
{
this(numero);
if(saldo<0)
throw new Exception("Saldo negativo");
this.dataCriacao = new GregorianCalendar();
Date date = new Date();
this.dataCriacao.setTime(date);
this.digitoVerificador=(byte)((byte) numero/10);
this.saldo=saldo;
}
public Conta(long numero)
{
this.numero=numero;
}
public long getNumero()
{
return this.numero;
}
public byte getDigitoVerificador()
{
return this.digitoVerificador;
}
public Calendar getDatacriacao()
{
return this.dataCriacao;
}
public double getSaldo(long numero)
{
double saldo=0;
if(Conta.conta!=null)
{
for(i=0;i<conta.size();i++)
{
if(conta.get(i).getNumero()==numero)
saldo= conta.get(i).getSaldo();
}
}
if(saldo==0)
{
if(equals(this))
saldo=this.saldo;
else
saldo=0;
}
return saldo;
}
private double getSaldo()
{
return this.saldo;
}
public void realizaDeposito()
{
}
public boolean realizaSaque(long numero,double saque)
{
boolean flag=true;
saldo=getSaldo(numero);
double newValue=saldo-saque;
if((newValue)<0)
flag=false;
else
{
Conta.conta.get(i).setSaldo(newValue);
flag=true;
}
return flag;
}
public String toString()
{
return this.getNumero()+" - "+this.getDigitoVerificador()+" - "+this.getSaldo()+" - "+this.dataCriacao.getTime();
}
public static void setConta(Conta conta)
{
if(Conta.conta==null)
{
Conta.conta=new ArrayList<Conta>();
Conta.conta.add(conta);
}
else
Conta.conta.add(conta);
}
public static ArrayList<Conta> getConta()
{
return Conta.conta;
}
private void setSaldo(double saldo)
{
this.saldo=saldo;
}
public boolean equals(Object obj)
{
Conta conta_new = ((Conta) obj);
boolean flag=false;
if(Conta.conta!=null)
{
for(i=0;i<conta.size();i++)
{
if(conta.get(i).getNumero()==conta_new.getNumero())
flag=true;
}
}
return flag;
}
}
Observem esses métodos pois neles estão o problema
public boolean realizaSaque(long numero,double saque)
{
boolean flag=true;
saldo=getSaldo(numero);
double newValue=saldo-saque;
if((newValue)<0)
flag=false;
else
{
Conta.conta.get(i).setSaldo(newValue);
flag=true;
}
return flag;
}
private void setSaldo(double saldo)
{
this.saldo=saldo;
}
Quando eu pego um objeto qualquer através do índice e chamo o método que pertence a repesctiva classe acontece o erro
segue o código abaixo:
Conta.conta.get(i).setSaldo(newValue);
Porque será que acontece esse erro se cada objeto tem esse método ???