Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] c# - convertendo texto para conta - erro "System.IndexOutOfRangeException: "

Pessoal, estou com problema ao chamar o método ConverterStringParaContaCorrente(string linha), pois está retornando o erro: Unhandled exception. ``System.IndexOutOfRangeException: Index was outside the bounds of the array.

O método está desta forma:

 static ContaCorrente ConverterStringParaContaCorrente(string linha)
 {
     var campos = linha.Split(' ');
 var agencia = campos[0];
 var numero = campos[1];
 var saldo = campos[2].Replace('.',',');
 var nomeTitular = campos[3];

 var agenciaComInt = int.Parse(agencia);
 var numeroComInt = int.Parse(numero);
 var saldoComDouble = double.Parse(saldo);

 var titular = new Cliente();
 titular.Nome = nomeTitular;

 var resultado = new ContaCorrente(agenciaComInt, numeroComInt);
 resultado.Depositar(saldoComDouble);
 resultado.Titular = titular;

 return resultado;

}

Alguém sabe o que há de errado e como posso solucionar?

1 resposta
solução!

Oi Laís,

O erro System.IndexOutOfRangeException que você está enfrentando indica que o seu código está tentando acessar um índice de um array que não existe. Isso geralmente acontece quando a string linha que você está passando para o método ConverterStringParaContaCorrente não contém o número esperado de elementos após ser dividida pelo método Split.

Para resolver esse problema, você pode adicionar uma verificação para garantir que a string contém os campos suficientes antes de tentar acessá-los.

Exemplo:

static ContaCorrente ConverterStringParaContaCorrente(string linha)
{
    var campos = linha.Split(' ');

    // Verifica se há pelo menos 4 campos
    if (campos.Length < 4)
    {
        throw new ArgumentException("A linha deve conter pelo menos 4 campos: agência, número, saldo e nome do titular.");
    }

    var agencia = campos[0];
    var numero = campos[1];
    var saldo = campos[2].Replace('.', ',');
    var nomeTitular = campos[3];

    var agenciaComInt = int.Parse(agencia);
    var numeroComInt = int.Parse(numero);
    var saldoComDouble = double.Parse(saldo);

    var titular = new Cliente();
    titular.Nome = nomeTitular;

    var resultado = new ContaCorrente(agenciaComInt, numeroComInt);
    resultado.Depositar(saldoComDouble);
    resultado.Titular = titular;

    return resultado;
}

Esse código agora verifica se o array campos tem pelo menos 4 elementos. Se não tiver, ele lança uma exceção com uma mensagem clara, ajudando a identificar o problema.

tux matrix    Caso este post o tenha ajudado, por favor, marcar como solucionado ☑️. Bons Estudos! 🤓