Classe Conta e Thread

2 respostas
J

Boa tarde,

Estudando programação java, estou com o problema que classe não está retornando o valores corretos e gostaria de saber se o método transfere está correto?
/*
* classe Conta
* Esta classe é responsável por sacar, depositar e tranferir valor
*/
class Conta
{
	private double saldo; // atributo saldo
	private double limite = 50; // atributo limite, valor inicial 50
	private double saldoAnterior;

	public Conta(double saldo)
	{
		this.saldo = saldo;
	}

	/*
	* método saca()
	* @param quantidade = quantidade a cacar
	*/
	public synchronized void saca(double quantidade)
	{
		if((this.saldo + this.limite) > quantidade)
		{
			try 
			{
				Thread.sleep((int)(Math.random()*300));
			}catch (InterruptedException e)
			 {
				e.printStackTrace();
			 }
			saldoAnterior = this.saldo;
			this.saldo -= quantidade;
			System.out.println(Thread.currentThread().getName()+"\tSaldo Anterior: R$"+ saldoAnterior + 
																"\tSacou: "+ quantidade + 
																"\tSaldo: "+ this.saldo);
		}
	}

	/*
	* método deposita()
	* @param quantidade = quantidade a depositar
	*/
	public synchronized void deposita(double quantidade)
	{
		
		try 
		{
			Thread.sleep((int)(Math.random()*300));
		}catch (InterruptedException e)
		{
			e.printStackTrace();
		}
		saldoAnterior = this.saldo;
		this.saldo += quantidade;
		System.out.println(Thread.currentThread().getName()+"\tSaldo Anterior:"+ saldoAnterior + 
															"\tDepositou: "+ quantidade + 
															"\tSaldo: "+ this.saldo);
	}

	/*
	* método transfere()
	* @param destino = conta que receberá a quantia
	* @param quantidade = quantidade da transferencia
	*/
	public synchronized void transferePara(Conta destino, double quantidade)
	{
		try 
		{
			Thread.sleep((int)(Math.random()*300));
		}catch (InterruptedException e)
		{
			e.printStackTrace();
		}
		saldoAnterior = this.saldo;
		this.saldo -= quantidade;
		destino.saldo += quantidade;
		System.out.println(Thread.currentThread().getName()+"\tSaldo Anterior:"+ saldoAnterior + 
															"\tTransferiu: "+ quantidade + 
															"\tSaldo: "+ this.saldo);
	}
}

/*
* classe Cliente
*/
class Cliente extends Thread
{
	private Conta conta;
	
	/*
	* construtor da classe Cliente
	*/
	public Cliente(String name, Conta conta)
	{
		super(name);
		this.conta = conta;
	}

	public void run()
	{
                for (int operacao = 10; operacao >= 0; operacao--)
                {			
                	if (operacao <= 3)			
                               conta.saca(2);
                	else if(operacao > 3 && operacao <=6)                              
                               conta.deposita(10);
                	else if(operacao > 6 && operacao <= 10)
                			   conta.transferePara(conta, 50);
		}
	}
}


public class Programa {
	public static void main(String[] args)
	{
		Conta conta = new Conta(100);
		Conta conta2 = new Conta(100);
		
		Cliente joao = new Cliente("Joao", conta);
	
		Cliente maria = new Cliente("Maria", conta2);
	
		joao.start();
		maria.start();
	}

}
Agradeço desde já, Júnio César Silva

2 Respostas

F

Que valores tu queria/deveria ser retornado?

Porque executei o programa aqui e ele rodou bem, mas com relação a saída correta, você precisaria esclarecer melhor.

O método transfere está aguardando um pequeno perído de tempo e então efetuando as operações que tu mandou fazer e em seguida imprime uma String.
Como ele deveria se comportar?

J

Muito obrigado pela atenção Fernandoeick.
Quando faço a tranferencia, não me mostra o saldo atualizado.

Agradeço desde já,
Júnio

Criado 30 de março de 2009
Ultima resposta 30 de mar. de 2009
Respostas 2
Participantes 2