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

Exercicio Venda Casada

Criei 2 formas de implementar o exercicio, a primeira igual a resposta do exercicio, deu tudo certo, mas outra eu implementei uma classe que tem uma lista de itens de venda casada. Na classe Testa desconto adicionei dois itens na lista ItensVendaCasada .adicionaItem(Item) e adicionei os mesmos itens no orcamento, mas retornou false;

    package br.com.Alura.Design_Pattern;

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

    public class ItensVendaCasada {

    private static List<Item> itensVendaCasada = new ArrayList<Item>();

        public void adicionaItem(Item item) {
            itensVendaCasada.add(item);
        }

        public static List<Item> getItensVendaCasada() {
            return itensVendaCasada;
        }

}

ta retornando false no metodo DescontoPorVendaCasada2.existeItens(Orcamento orcamento);

    package br.com.Alura.Design_Pattern;

    import java.util.List;

    public class DescontoPorVendaCasada2 implements Desconto2 {

    private Desconto2 proximo;

    List<Item> listaItensVendaCasada = ItensVendaCasada.getItensVendaCasada();

    @Override
    public double calcula(Orcamento orcamento) {
        if (existeItens(orcamento)) {
            return orcamento.getValor() * 0.05;
        } else {
            return proximo.calcula(orcamento);
        }
    }

    private boolean existeItens(Orcamento orcamento) {

        // Aqui uma lista de Itens venda casada comparando com 
        // itens de outra lista que esta na classe orcamento

        if(listaItensVendaCasada.containsAll(orcamento.getItens())) {
            return true;
            }
        return false;
    }

    @Override
    public void setProximo(Desconto2 proximo) {
        this.proximo = proximo;

    }

}
2 respostas
solução!

Depois de quebrar a cabeça um monte, lembrei que não tinha sobrescrito o metodo equals na classe item.

@Override
    public boolean equals(Object obj) {
        if(!(obj instanceof Item)) {
            return false;
        }else {
            Item outro = (Item) obj;
            return outro.getNome().equals(this.getNome());
        }
    }

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