Dúvida Programa utilizando arraylist

11 respostas Resolvido
X

Eis o exercício:

Considere o código das classes Item e Pedido a seguir. Admita que as classes estejam nmesmo pacote. Os detalhes dos métodos get e set de ambas as classes foram omitidos, mas eles existem e seus nomes seguem o padrão de codificação Java.

Escreva uma classe Programa que contenha o método main com os seguintes procedimentos:

a. Forneça uma implementação do método toString para a classe Item e Pedido de forma a representar textualmente todos os seus atributos.

b. Crie uma coleção de Item(classe) e armazene em uma variável local. O tipo davariável deve ser do tipojava.util.Collectione você deve escolher a
implementação mais adequada da interface para instanciar a variável.

c. crie um pedido e configure seus atributos (invocando métodos set), somente deixando para configurar a lista de Itens em outro momento.

d. instancie três itens com descrições, preços e IDs diferentes e adicione cada umdeles à lista criada anteriormente. Durante a instanciação de itens,
associe os itens ao pedido que você criou anteriormente

e. Associe a lista de itens ao objeto do tipo pedido criado na questão C (usando o método set) e imprima o pedido, incluindo sua lista completa de itens.

f. Escreva um método chamado filtrarItensAbaixoPreco na classePedido, quereceba como parâmetro um valor (double) e retorne uma coleção de itens daquele
Pedido, cujo preço é menor do que o valor informado como parâmetro.

import java.util.ArrayList;

public class Pedido {

	private int id;
	private String cliente;
	private static  ArrayList<Item> itens;
	
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public String getCliente() {
		return cliente;
	}
	
	public void setCliente(String cliente) {
		this.cliente = cliente;
	}
	
	public ArrayList<Item> getItensCollection() {
		return itens;
	}
	
	public  void setItens(ArrayList<Item> itens) {
		Pedido.itens = itens;
	}
	
	@Override
	public String toString() {
		return "Pedido [id=" + id + ", cliente=" + cliente + "]";
	}	
}
public class Item {
	
	private int id;
	private double preco;
	private String descricao;
	private Pedido idPedido;
	
	public Item(int id, double preco, String descricao, Pedido idPedido) {
		super();
		this.id = id;
		this.preco = preco;
		this.descricao = descricao;
		this.idPedido = idPedido;
	}
	
	public int getId() {
		return id;
	}
	
	public void setId(int id) {
		this.id = id;
	}
	
	public double getPreco() {
		return preco;
	}
	
	public void setPreco(double preco) {
		this.preco = preco;
	}
	
	public String getDescricao() {
		return descricao;
	}
	
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	
	public Pedido getIdPedido() {
		return idPedido;
	}
	
	public void setIdPedido(Pedido idPedido) {
		this.idPedido = idPedido;
	}
	
	@Override
	public String toString() {
		return "Item [id = " + id + ", preco = " + preco + ", descricao = " + descricao + ", idPedido = " + idPedido + "]";
	}
}
import java.util.ArrayList;

public class Programa {
	
	public static void main(String[] args) {
		Pedido pedido = new Pedido();
		pedido.setCliente("Pedro");
		pedido.setId(12345);
		
		Item item1 = new Item(33289, 20.00, "mouse", pedido);
		Item item2 = new Item(1220, 45.00, "webcam", pedido);
		Item item3 = new Item(122678, 30.00, "teclado", pedido);
		
		ArrayList<Item> itens = new ArrayList<Item>();
		System.out.println(pedido.toString());
		System.out.println("");
		itens.add(item1);
		itens.add(item2);
		itens.add(item3);
		System.out.println(itens);
	}
}

O que eu fiz até agora

11 Respostas

X

gostaria de saber como faz esse item f e também gostaria que vocês avaliassem o meu código para ver o que possa estar errado ou possa melhorar

staroski

A lista de itens não deve ser static

X

por que?

X

você pode me dizer qual a logica que uso para fazer esse metodo do item f? já tentei aqui e não consigo chegar a uma resolução.

X
public ArrayList<Item> filtrarItensAbaixoDoPreco(double valor) {
	
	if(itens.contains(item.getPreco()) && item.getPreco()>=valor);
	itens.remove(item);
	return itens;
	
}

tentei dessa forma mas está errado

staroski
Solucao aceita

O certo seria eu perguntar porque você acha que precisa ser static.

Você entende a diferença entre CLASSE e OBJETO?
Entender essa diferença é primordial para você saber quando usar static.

Os itens pertencem ao Pedido, certo?.
Isso significa que cada OBJETO Pedido tem sua própria lista de itens.
Se você colocar como static, essa lista não será dos OBJETOS e será da CLASSE e consequentemente, você estará compartilhando a mesma lista com todos os objetos Pedido que você criar.

Dê uma olhada nas alterações que fiz no seu código:

Classe Pedido:

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

public class Pedido {

    private int id;
    private String cliente;
    private Collection<Item> itens;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getCliente() {
        return cliente;
    }

    public void setCliente(String cliente) {
        this.cliente = cliente;
    }

    public Collection<Item> getItens() {
        return itens;
    }

    public void setItens(Collection<Item> itens) {
        this.itens = itens;
    }

    public Collection<Item> filtrarItensAbaixoPreco(double valor) {
        List<Item> filtrados = new ArrayList<>();
        for (Item item : itens) {
            if (item.getPreco() < valor) {
                filtrados.add(item);
            }
        }
        return filtrados;
    }

    @Override
    public String toString() {
        StringBuilder texto = new StringBuilder("Pedido [id=").append(id).append(", cliente=").append(cliente).append("]");
        for (Item item : itens) {
            texto.append("\n\t").append(item);
        }
        return texto.toString();
    }
}

Classe Item:

public class Item {

    private int id;
    private double preco;
    private String descricao;
    private Pedido pedido;

    public Item(int id, double preco, String descricao, Pedido pedido) {
        super();
        this.id = id;
        this.preco = preco;
        this.descricao = descricao;
        this.pedido = pedido;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public double getPreco() {
        return preco;
    }

    public void setPreco(double preco) {
        this.preco = preco;
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Pedido getPedido() {
        return pedido;
    }

    public void setPedido(Pedido pedido) {
        this.pedido = pedido;
    }

    @Override
    public String toString() {
        return "Item [id = " + id + ", preco = " + preco + ", descricao = " + descricao + ", idPedido = " + pedido.getId() + "]";
    }
}

Classe Programa:

import java.util.ArrayList;
import java.util.Collection;

public class Programa {

    public static void main(String[] args) {
        Programa programa = new Programa();
        programa.executar();
    }

    public void executar() {
        Pedido pedido = new Pedido();
        pedido.setCliente("Pedro");
        pedido.setId(12345);

        Collection<Item> itens = new ArrayList<>();

        Item item1 = new Item(33289, 20.00, "mouse", pedido);
        itens.add(item1);

        Item item2 = new Item(1220, 45.00, "webcam", pedido);
        itens.add(item2);

        Item item3 = new Item(122678, 30.00, "teclado", pedido);
        itens.add(item3);

        pedido.setItens(itens);

        System.out.println(pedido);

        double valor = 40.0;
        Collection<Item> itensFiltrados = pedido.filtrarItensAbaixoPreco(valor);
        System.out.println("Itens abaixo de " + valor + " reais:");
        for (Item item : itensFiltrados) {
            System.out.println(item);
        }
    }
}
X

sim eu sei a diferença, é que já estava cansado ontem, hoje já fiz algumas alterações mas ainda sim sem sucesso no metodo que filtra os preços.

staroski

No código que eu postei o filtro funciona.

X

poderia me explicar esse for?

staroski

Esse código é um enhanced for, também chamado de for each:

for (Item item : itens) {
    if (item.getPreco() < valor) {
        filtrados.add(item);
    }
}

Ele equivale a escrever um código assim:

Iterator<Item> iterator = itens.iterator();
while (iterator.hasNext()) {
    Item item = iterator.next();
    if (item.getPreco() < valor) {
        filtrados.add(item);
    }
}

Seu enunciado pede que a lista de itens seja declarada como sendo do tipo Collection.
Se ela fosse declarada como sendo do tipo List, você também poderia implementar o laço dessa forma:

for (int i = 0; i < itens.size(); i++) {
    Item item = itens.get(i);
    if (item.getPreco() < valor) {
        filtrados.add(item);
    }
}
X

valeu, irei dar uma pesquisada aqui. obrigado pela ajuda, esclareceu algumas coisas para mim

Criado 4 de julho de 2019
Ultima resposta 5 de jul. de 2019
Respostas 11
Participantes 2