Ajuda no exercicio 10 do capitulo 7 Caelum fj-11

Exercicio

10) (Opcional, Trabalhoso) Crie uma classe Banco que possui um array de Conta. Repare que num array de
Conta você pode colocar tanto ContaCorrente quanto ContaPoupanca. Crie um método void adiciona(Conta
c), um método Conta pegaConta(int x) e outro int pegaTotalDeContas(),

entao eu fiz minhas classes

public class Banco 
{
	Conta[] arrayConta;
	
	public Banco(int valor)
	{
		this.arrayConta = new Conta[valor];
	}
	
	public void adiciona(Conta c)
	{
		for(int i=0; i < arrayConta.length; i++)
		{
			if(this.arrayConta[i] == null)
			{
				this.arrayConta[i] = c;

			}
		
			else 
				System.out.println("ArrayConta Cheia");
		}
	}
	
	public Conta pegaConta(int x)
	{
		System.out.println("Conta do Banco"+ arrayConta[x]);
		return arrayConta[x];
	}
	
	public int pegaTotalDeContas()
	{
		int total =0;
		for(int i=0; i < arrayConta.length; i++)
		{
			if(this.arrayConta[i] == null)
			total +=0;
			
			else 
				total++;			
		}
		
		return total;
	}

}
public class TestBanco 
{
	public static void main(String args[])
	{
		Banco banco;
		
		Conta c = new Conta();
		Conta cc = new ContaCorrente();
		Conta cp = new ContaPopanca();
		AtualizadorDeContas adc = new AtualizadorDeContas(0.01);
		
		banco = new Banco(3);
		
		c.deposita(1000);
		cc.deposita(1000);
		cp.deposita(1000);
		
		banco.adiciona(c);
		banco.adiciona(cc);
		banco.adiciona(cp);
		
		for(int i=0;i < banco.pegaTotalDeContas(); i++)
		{
			if(banco.pegaTotalDeContas() != 0)
			{
				adc.roda(banco.pegaConta(i));
			}
			
			else
			System.out.println("Nenhuma conta criada");
		}
		
		
	}
}

e a classe

[code]
public class AtualizadorDeContas
{
private double saldoTotal = 0;
private double selic;

public AtualizadorDeContas(double selic)
{
	this.selic = selic;
}

public void roda(Conta c)
{
	System.out.println("Saldo anterior"+c.getSaldo());
	c.atualizar(selic);
	System.out.println("Seu saldo final é: "+c.getSaldo());
	this.saldoTotal += c.getSaldo();
}

public void setSaldoTotal(double saldoTotal)
{
	this.saldoTotal = saldoTotal;
}

public double getSaldoTotal()
{
	return this.saldoTotal;
}

}[/code]

entao elas roda normal mais o resultado
é esse

[color=red]
ArrayConta CheiaConta
ArrayConta CheiaConta
ArrayConta CheiaConta
ArrayConta CheiaConta
ArrayConta CheiaConta
ArrayConta CheiaConta
Conta do BancoConta@190d11
Saldo anterior1000.0
Seu saldo final é: 1010.0
Conta do BancoConta@190d11
Saldo anterior1010.0
Seu saldo final é: 1020.1
Conta do BancoConta@190d11
Saldo anterior1020.1
Seu saldo final é: 1030.301
[/color]

entao nao era para aparecer ArrayConta CheiaConta

public void adiciona(Conta c)  
    {  
        for(int i=0; i < arrayConta.length; i++)  
        {  
            if(this.arrayConta[i] == null)  
            {  
                this.arrayConta[i] = c;  
  
            }  
          
            else   
                System.out.println("ArrayConta Cheia");  
        }  
    } 

Da linha 10 até a linha 18, o que você está fazendo é inserir o mesmo objeto ao array de contas.
Veja:

// Recebe a Conta
public void adiciona(Conta c)  
    {  
        // Percorre o array
        for(int i=0; i < arrayConta.length; i++)  
        {  
            // Se a posição 'i' estiver vazia
            if(this.arrayConta[i] == null)  
            {  
                // Insere o objeto ao array, porém o for continua sendo executado, inserindo o mesmo objeto a todas as posições do array ao invés de parar
                this.arrayConta[i] = c;

O que você tem que fazer ai é, depois de inserir o objeto parar de percorrer o loop for.

Espero ter ajudado ^^