1
resposta

SoluçãoAlternativa

Oi pessoal! Quando o professor Guilherme identificou que o código teria que percorrer a Array toda toda vez que fosse aumentar o tamanho, eu intervi e resolvi sem os argumentos opcionais e sobrecargas:


        private void VerificarCapacidade(int tamanhoNecessario)
        {
            if (_itens.Length >= tamanhoNecessario)
            {
                return; //nao faz nada
            }
            Console.WriteLine("Aumentando capacidade da lista");

            ContaCorrente[] novoArray = new ContaCorrente[tamanhoNecessario];

            for (int indice = _itens.Length; indice < _itens.Length; indice++)
            {
                novoArray[indice] = _itens[indice];
                Console.WriteLine(".");

            }
            _itens = novoArray; // a referência aponta para o novoArray.
        }
    }

Dentro do for, troquei a condição do indice para "int indice = _itens.Length", assim quando receber a array, receberá ela com o tamanho atual, menor do que o tamanho necessário, mas a diferença sempre será de um.

Assim quando o método Adicionar for chamado e estourar o tamanho da array, ela compila e cria diretamente um espaço a mais na novaArray:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Código inteiro do ListaDeContaCorrente.cs:

using ByteBank.Modelos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ByteBank.SistemaAgencia
{
    public class ListaDeContaCorrente
    {
        private ContaCorrente[] _itens;
        private int _proximaPosicao;

        public ListaDeContaCorrente()
        {
            _itens = new ContaCorrente[5];
            _proximaPosicao = 0; // só pra deixar claro.
        } 

        public void Adicionar(ContaCorrente item)
        {
            VerificarCapacidade(_proximaPosicao + 1);

            Console.WriteLine($"Adicionando item na posição {_proximaPosicao}");


            _itens[_proximaPosicao] = item;
            _proximaPosicao++;
        }

        private void VerificarCapacidade(int tamanhoNecessario)
        {
            if (_itens.Length >= tamanhoNecessario)
            {
                return; //nao faz nada
            }
            Console.WriteLine("Aumentando capacidade da lista");

            ContaCorrente[] novoArray = new ContaCorrente[tamanhoNecessario];

            for (int indice = _itens.Length; indice < _itens.Length; indice++)
            {
                novoArray[indice] = _itens[indice];
                Console.WriteLine(".");

            }
            _itens = novoArray; // a referência aponta para o novoArray.
        }
    }
}

Fica aí a alternativa que encontrei!

1 resposta

Boa tarde Matteo,

Primeiramente parabéns pela solução e obrigado por compartilhar conosco.

Att.