1
resposta

MEU CÓDIGO NÃO COMPARA O TITULAR

Olá, fiz o código acompanhando a aula, mas não está imprimindo no console as contas ordenadas pelo nome do titular, segue código abaixo:

package br.com.bytebank.banco.teste.util;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import br.com.bytebank.banco.modelo.Cliente;
import br.com.bytebank.banco.modelo.Conta;
import br.com.bytebank.banco.modelo.ContaCorrente;
import br.com.bytebank.banco.modelo.ContaPoupanca;


public class Testee {

        public static void main(String[] args) {

               Conta cc1 = new ContaCorrente(22, 33);
               Cliente clienteCC1 = new Cliente();
               clienteCC1.setNome("Nico");
               cc1.setTitular(clienteCC1);
               cc1.deposita(333.0);

               Conta cc2 = new ContaPoupanca(22, 44);
               Cliente clienteCC2 = new Cliente();
               clienteCC2.setNome("Guilherme");
               cc2.setTitular(clienteCC2);
               cc2.deposita(444.0);

               Conta cc3 = new ContaCorrente(22, 11);
               Cliente clienteCC3 = new Cliente();
               clienteCC3.setNome("Paulo");
               cc3.setTitular(clienteCC3);
               cc3.deposita(111.0);

               Conta cc4 = new ContaPoupanca(22, 22);
               Cliente clienteCC4 = new Cliente();
               clienteCC4.setNome("Ana");
               cc4.setTitular(clienteCC4);
               cc4.deposita(222.0);






                List<Conta> lista = new ArrayList<>();
                lista.add(cc1);
                lista.add(cc2);
                lista.add(cc3);
                lista.add(cc4);


                for (Conta conta : lista) {
                    System.out.println(conta);
                }



                numeroDaContaComparator comparator = new numeroDaContaComparator();
                TitularDaContaComparator titularComparator = new TitularDaContaComparator();

                lista.sort(titularComparator);

                System.out.println("-----------------------------------------------");

                for (Conta conta : lista) {
                    System.out.println(conta + ", " + conta.getTitular().getNome());
                }


        }
}


 class TitularDaContaComparator implements Comparator<Conta> {

    @Override
    public int compare(Conta c1, Conta c2) {

        String nomeC1 = c1.getTitular().getNome();
        String nomeC2 = c1.getTitular().getNome();

        return nomeC1.compareTo(nomeC2);


    }




 }

 class numeroDaContaComparator implements Comparator <Conta> {

                    @Override
                    public int compare(Conta c1, Conta c2) {

                        if(c1.getNumero() < c2.getNumero()) {

                            return -345;
                        }

                        if(c1.getNumero() > c2.getNumero()) {
                            return 1;
                        }
                        return 0;
                    }

                }
1 resposta

Olá Douglas!

Seu erro é apenas falta de atenção.

Observe seu código:

 class TitularDaContaComparator implements Comparator<Conta> {

    @Override
    public int compare(Conta c1, Conta c2) {

        String nomeC1 = c1.getTitular().getNome();
        String nomeC2 = c1.getTitular().getNome();

        return nomeC1.compareTo(nomeC2);


    }

você atribui a nomeC2 o mesmo valor de nomeC1. É aí que está o bug.

faça as correções e tente novamente.

Se funcionar, não esqueça de marcar o tópico como resolvido!

Uma dica extra. Quando se deparar com um bug como este (algo não funciona, mas deveria) tente isolar o problema ao máximo. Remova código desnecessário e se debruce apenas onde o problema está ocorrendo

Neste caso, eu apaguei toda a parte desnecessária para poder ter meu foco 100% onde o problema ocorre. Ficou assim:

public class Teste {

        public static void main(String[] args) {

               Conta cc1 = new ContaCorrente(22, 33);
               Cliente clienteCC1 = new Cliente();
               clienteCC1.setNome("Nico");
               cc1.setTitular(clienteCC1);
               cc1.deposita(333.0);

               Conta cc2 = new ContaPoupanca(22, 44);
               Cliente clienteCC2 = new Cliente();
               clienteCC2.setNome("Guilherme");
               cc2.setTitular(clienteCC2);
               cc2.deposita(444.0);

               Conta cc3 = new ContaCorrente(22, 11);
               Cliente clienteCC3 = new Cliente();
               clienteCC3.setNome("Paulo");
               cc3.setTitular(clienteCC3);
               cc3.deposita(111.0);

               Conta cc4 = new ContaPoupanca(22, 22);
               Cliente clienteCC4 = new Cliente();
               clienteCC4.setNome("Ana");
               cc4.setTitular(clienteCC4);
               cc4.deposita(222.0);


                List<Conta> lista = new ArrayList<>();
                lista.add(cc1);
                lista.add(cc2);
                lista.add(cc3);
                lista.add(cc4);


                TitularDaContaComparator titularComparator = new TitularDaContaComparator();

                lista.sort(titularComparator);


                for (Conta conta : lista) {
                    System.out.println(conta + ", " + conta.getTitular().getNome());
                }
        }
}


 class TitularDaContaComparator implements Comparator<Conta> {
    @Override
    public int compare(Conta c1, Conta c2) {

        String nomeC1 = c1.getTitular().getNome();
        String nomeC2 = c1.getTitular().getNome();

        return nomeC1.compareTo(nomeC2);
    }
 }

Isso já foi suficiente para eu perceber o problema, mas se não fosse, o proximo passo seria adicionar um breakpoint para debugar o codigo (executar linha a linha) para tentar entender a mecanica do programa e o porque das coisas não estarem dando certo.

Forte abraço e bons estudos!