Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Exception in thread

Boa tarde, estou tendo problemas com o seguinte código: package br.com.bancoteste.banco.test.util;

import java.util.ArrayList; import java.util.Comparator; import java.util.List;

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

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

    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 {

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

    String nomeC1 = c1.getTitular().getNome();
    String nomeC2 = c2.getTitular().getNome();                   
    return nomeC1.compareTo(nomeC2);                              
}

}

class NumeroDaContaComparator implements Comparator {

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

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

}

Ele apresenta o seguinte erro :

Exception in thread "main" java.lang.NullPointerException at br.com.bancoteste.banco.test.util.TitularDaContaComparator.compare(Teste.java:70) at br.com.bancoteste.banco.test.util.TitularDaContaComparator.compare(Teste.java:1) at java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) at java.util.TimSort.sort(TimSort.java:220) at java.util.Arrays.sort(Arrays.java:1512) at java.util.ArrayList.sort(ArrayList.java:1454) at br.com.bancoteste.banco.test.util.Teste.main(Teste.java:52)

O que está acontecendo?

2 respostas
solução!

Olá João, tudo bem?

Provavelmente o seu código deu erro por você não especificar os tipos dos comparadores, veja que sempre que implementamos a interface Comparator é necessário definir o que iremos comparar, no nosso caso, estamos querendo comparar contas, então corrigindo os dois métodos para:

  • class NumeroDaContaComparator implements Comparator<Conta> {

  • class TitularDaContaComparator implements Comparator {

Dessa forma o seu código irá conseguir fazer as operações corretamente :)

Entendeu? Qualquer coisa estou a disposição :)

Abraços e Bons Estudos!

Muito obrigado pela ajuda, deu certo :)