5
respostas

[Sugestão] Ordenação na ordem crescente ou decrescente

Olá!

Como já contestado anteriormente por outros, no tópico ordenação que deveria ser ordenada por número da conta e não por número da agência, vou sugerir ordenar também por ordem decrescente do último número da conta listada, tente fazer aqui, mas não consegui. Então como Podemos fazer ?

5 respostas

Olá, Rubens! Como vai?

Para ordenar as contas na ordem decrescente do último número da conta, você pode modificar o método CompareTo() na classe ContaCorrente. A ideia é comparar os números das contas considerando o último dígito. Vou te mostrar como você pode fazer isso.

Primeiro, você precisa garantir que o número da conta seja uma string ou que possa ser facilmente convertido em uma string para acessar o último caractere. Supondo que o número da conta seja uma string, você pode fazer algo assim:

public int CompareTo(ContaCorrente? outro)
{
    if (outro == null)
    {
        return 1;
    }
    else
    {
        // Pegando o último caractere do número da conta
        char ultimoDigitoThis = this.Numero_conta[this.Numero_conta.Length - 1];
        char ultimoDigitoOutro = outro.Numero_conta[outro.Numero_conta.Length - 1];

        // Comparando de forma decrescente
        return ultimoDigitoOutro.CompareTo(ultimoDigitoThis);
    }
}

Neste exemplo, estamos pegando o último caractere do número da conta e usando o CompareTo() para compará-los, mas de forma invertida (ultimoDigitoOutro.CompareTo(ultimoDigitoThis)) para que a ordenação seja decrescente.

Lembre-se de testar o seu código após fazer essa alteração para garantir que a ordenação está funcionando como esperado.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Olá! Meu código já modificado com a sugestão dada anteriormente na classe ContaCorrente.cs :

#nullable disable
namespace bytebank.Modelos.Conta
{
    public class ContaCorrente : IComparable<ContaCorrente>
    {

        public Cliente Titular { get; set; }
        public string Nome_Agencia { get; set; }

        private int _numero_agencia;

        public int Numero_agencia
        {
            get
            {
                return _numero_agencia;
            }
            set
            {
                if (value <= 0)
                {

                }
                else
                {
                    _numero_agencia = value;
                }
            }

        }

        private string _conta;
        public string Conta
        {
            get
            {
                return _conta;
            }
            set
            {
                if (value == null)
                {
                    return;
                }
                else
                {
                    _conta = value;
                }
            }
        }

        private double saldo;
        private object numeroConta;

        public double Saldo
        {
            get
            {
                return saldo;
            }
            set
            {
                if (value < 0)
                {
                    return;
                }
                else
                {
                    saldo = value;
                }
            }
        }

        public bool Sacar(double valor)
        {
            if (saldo < valor)
            {
                return false;
            }
            if (valor < 0)
            {
                return false;
            }
            else
            {
                saldo = saldo - valor;
                return true;
            }
        }

        public void Depositar(double valor)
        {
            if (valor < 0)
            {
                return;
            }
            saldo = saldo + valor;
        }

        public bool Transferir(double valor, ContaCorrente destino)
        {
            if (saldo < valor)
            {
                return false;
            }
            if (valor < 0)
            {
                return false;
            }
            else
            {
                saldo = saldo - valor;
                destino.saldo = destino.saldo + valor;
                return true;
            }
        }

        public int CompareTo(ContaCorrente? outro)
        {
            if (outro == null)
            {
                return 1;
            }
            else
            {
                // Pegando o último caractere do número da conta
                char ultimoDigitoThis = this.NumeroConta[this.NumeroConta.Lenght - 1];

                char ultimoDigitoOutro = outro.NumeroConta[outro.NumeroConta.Length - 1];

                // Comparando de forma decrescente
                return ultimoDigitoOutro.CompareTo(ultimoDigitoThis);
                
            }
                
                       
        }
         
        public ContaCorrente(int numero_agencia,string conta)
        {
            Numero_agencia = numero_agencia;
            Conta = conta;
            Titular = new Cliente();
            TotalDeContasCriadas += 1;

        }

        public ContaCorrente(int numero_agencia)
        {
            Numero_agencia = numero_agencia;
            Conta = Guid.NewGuid().ToString().Substring(0, 8);
            Titular = new Cliente();
            TotalDeContasCriadas += 1;
        }

        public static int TotalDeContasCriadas { get; set; }
        



        //public override bool Equals(object? conta)
        //{
        //    ContaCorrente outroConta = conta as ContaCorrente;

        //    if (outroConta == null)
        //    {
        //        return false;
        //    }

        //    return Numero_agencia == outroConta.Numero_agencia && 
        //        Conta.Equals(outroConta.Conta);
        //}

        public override string ToString()
        {

            return $" === DADOS DA CONTA === \n\n" +
                            $"Número da Conta : {this.Conta} \n" +
                            $"Número da Agência : {this.Numero_agencia} \n" +
                            $"Saldo da Conta: {this.Saldo} \n" +
                            $"Titular da Conta: {this.Titular.Nome} \n" +
                            $"CPF do Titular  : {this.Titular.Cpf} \n" +
                            $"Profissão do Titular: {this.Titular.Profissao}\n\n";
        }
    }
}

Ocorre erro indicado pela seta abaixo:

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

Oi, Rubens! Como vai?

Sobre sua última dúvida, o problema com o erro apontado está no uso incorreto do método Length (escrito como Lenght) e do atributo NumeroConta. A solução envolve corrigir a escrita de Length e ajustar a lógica de acesso ao atributo.

Além disso, parece que o atributo NumeroConta não está definido ou é referenciado de forma errada. O correto séria usar o atributo Conta, já que ele representa o número da conta.

Ajuste seu código assim:


public int CompareTo(ContaCorrente? outro)
{
    if (outro == null)
    {
        return 1;
    }
    else
    {
        // Pegando o último caractere do número da conta
        char ultimoDigitoThis = this.Conta[this.Conta.Length - 1];
        char ultimoDigitoOutro = outro.Conta[outro.Conta.Length - 1];

        // Comparando de forma decrescente
        return ultimoDigitoOutro.CompareTo(ultimoDigitoThis);
    }
}

Aqui está o que foi corrigido:

  1. Substituí NumeroConta por Conta, pois este atributo parece ser o correto.
  2. Corrigi a escrita de Lenght para Length.

Após realizar essas alterações, teste o método para garantir que a ordenação decrescente pelo último número da conta está funcionando.

Fico à disposição.

Oi, Armano! beleza O problema do erro foi corrigido com esse código, mas ainda não resolveu a questão da ordenação decrescente pelo último número da conta.

Bom dia, Rubens!

Para garantir que a ordenação decrescente pelo último número da conta funcione corretamente, você pode usar um método que ajuste a lista diretamente antes de exibi-la. Veja como implementar isso de forma prática:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public static void Main()
    {
        // Exemplo de lista de contas
        List&lt;ContaCorrente&gt; contas = new List&lt;ContaCorrente&gt;()
        {
            new ContaCorrente(123, "4567"),
            new ContaCorrente(124, "1239"),
            new ContaCorrente(125, "9873")
        };

        // Ordenação decrescente pelo último dígito da conta
        var contasOrdenadas = contas.OrderByDescending(c =&gt; c.Conta.Last()).ToList();

        // Exibindo as contas ordenadas
        foreach (var conta in contasOrdenadas)
        {
            Console.WriteLine($"Agência: {conta.Numero_agencia}, Conta: {conta.Conta}");
        }
    }
}

public class ContaCorrente
{
    public int Numero_agencia { get; set; }
    public string Conta { get; set; }

    public ContaCorrente(int numero_agencia, string conta)
    {
        Numero_agencia = numero_agencia;
        Conta = conta;
    }
}

O que esse código faz:

  1. Usa o método OrderByDescending para ordenar a lista de contas com base no último dígito do atributo Conta.

  2. Aplica o método Last() diretamente para acessar o último caractere da string.

Teste esta abordagem e ajuste conforme a sua necessidade para que a exibição das contas reflita corretamente a ordem decrescente.

Fico à disposição.