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

Não está ordenando pelo nome

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+", "+ conta.getTitular().getNome());
        }

        //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());
        }

    }
}

//compara numero das contas

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);

        }
    }

1 resposta
solução!

Oie Thalia, tudo bem com você?

O seu código não está ordenando pelo nome devido a um erro na classe "TitularDaContaComparator", no atributo "String nomeC2" onde ao invés de setar "c2.getTitular().getNome();" está setando "c1.getTitular().getNome();" ficando igual ao primeiro método.

Segue a explicação direta no 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(); // o erro está aqui, ele deve receber c2.getTiular().getNome() e não c1.getTitular().getNome()

        return nomeC1.compareTo(nomeC2);

        }
    }

Código corrigido:


class TitularDaContaComparator implements Comparator<Conta>{

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

        String nomeC1 = c1.getTitular().getNome();
        String nomeC2 = c2.getTitular().getNome(); // agora está corrigido

        return nomeC1.compareTo(nomeC2);

        }
    }

Espero que eu tenha ajudado, qualquer dúvida ou problema fico a disposição :)

Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software