Listas

2 respostas
edymrex

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 ???

2 Respostas

fiaux

Qual erro acontece?

sergiotaborda

Puppets:
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.

Eu não analizei o seu codigo, mas para começo de conversa vc não pode usar o método setSaldo de dentro do cliente.Muito menos esse método pode ser publico.

Porque getSaldo não é apenas “return this.saldo” ?
O que é o “numero” no método “realizaSaque” ?

Criado 11 de abril de 2008
Ultima resposta 11 de abr. de 2008
Respostas 2
Participantes 3