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

Não encontrei a classe de teste neste exercicio e a minha não funciona

public class TestaFiltro {

    public static void main(String[] args) {
        Conta c1 = new Conta();
        c1.setNome("Quilmer");
        c1.setSaldo(150.0);

        Conta c2 = new Conta();
        c2.setNome("Quilmer2");
        c2.setSaldo(90.0);

        Conta c3 = new Conta();
        c3.setNome("Quilmer3");
        c3.setSaldo(500.0); 

        Conta c4 = new Conta();
        c4.setNome("Quilmer4");
        c4.setSaldo(600000); 

        List<Conta> contas = new ArrayList<>();
        contas.add(c1);
        contas.add(c2);
        contas.add(c3);
        contas.add(c4);
        ContaComSaldoMenorQue100Reais menor100 = new ContaComSaldoMenorQue100Reais(new ContaComSaldoMaiorQue500Mil());
        List<Conta> contasFiltradas = menor100.filtra(contas);
        for(Conta conta:contasFiltradas){
            System.out.println("A conta é: "+conta.getNome()+" o saldo é: "+conta.getSaldo());
        }

    }

}
4 respostas

Olá Quilmer

Qual é o problema que você está tendo com a sua classe de teste? O código não está compilando ou sua lógica não está devolvendo o resultado que você esperava?

Recebo esta exception

Exception in thread "main" java.lang.NullPointerException at Filtro.proximo(Filtro.java:18) at ContaComSaldoMaiorQue500Mil.filtra(ContaComSaldoMaiorQue500Mil.java:20) at Filtro.proximo(Filtro.java:18) at ContaComSaldoMenorQue100Reais.filtra(ContaComSaldoMenorQue100Reais.java:19) at TestaFiltro.main(TestaFiltro.java:30)

Meu filtro da tabela Filtro

public List<Conta> proximo(List<Conta> contas) {
        if (contas != null) {
            return outroFiltro.filtra(contas);
        } else {
            return new ArrayList<Conta>();
        }
    }

Método filtra na classe ComSaldoMenorQue100

public List<Conta> filtra(List<Conta> contas) {
        List<Conta> filtrada = new ArrayList<Conta>();
        for(Conta c : contas) {
          if(c.getSaldo() < 100) filtrada.add(c);
        }

        filtrada.addAll(proximo(contas));
        return filtrada;
      }

Método filtra na classe ComSaldoMaiorQue500Mill

public List<Conta> filtra(List<Conta> contas) {
        List<Conta> filtrada = new ArrayList<Conta>();
        for(Conta c : contas) {
          if(c.getSaldo() > 50000) filtrada.add(c);
        }

        filtrada.addAll(proximo(contas));
        return filtrada;
      }
solução!

Oi Quilmer

Seu código está lançando uma exceção porque o método proximo não está verificando se outroFiltro é diferente de null antes de chamar o método filtra.

O código deveria ficar da seguinte forma:

    public List<Conta> proximo(List<Conta> contas) {
        if (contas != null && outroFiltro != null) {
            return outroFiltro.filtra(contas);
        } else {
            return new ArrayList<Conta>();
        }
    }

Obrigado, foi um descuido meu.

Deu certo agora.