Dúvida ArrayList

23 respostas
R

Pessoal, estou iniciando no mundo da programação e a primeira atividade do professor é muito complicada, será que vcs poderiam me ajudar:

vejam

Você ficou responsável por desenvolver um sistema para realizar o controle de estoque de um supermercado. conforme a descrição abaixo:

Nessa aplicação, os produtos são divididos em: alimentícios e de limpeza. Os produtos alimentícios possuem os seguintes atributos: código, descrição, preço, estoque e data de validade. Já os produtos de limpeza possuem: código, descrição, preço, estoque e um boolean indicando se é um produto perigoso. Modele essas classes utilizando classe abstrata.

Crie uma classe de cadastro que utilize um ArrayList para realizar o cadastro de produtos. Essa classe possui os seguintes métodos: cadastrar (recebe um produto e adiciona no ArrayList), comprar (recebe um produto e uma quantidade e incrementa o estoque desse produto), vender (recebe um produto e uma quantidade e descrementa o estoque desse produto)
Crie as seguintes classes de exceções e as lance: EstoqueInsuficienteException (é lançada quando se tenta vender mais que o estoque atual do produto), QuantidadeInvalidaException (é lançada quando se tenta comprar ou vender uma quantidade menor ou igual a zero) CodigoDuplicadoException (é lançada quando se tenta cadastrar mais de um produto com o mesmo código)
Crie uma classe principal para testar as funcionalidades

ajudem pelo menos na parte da criação do :ArrayList e os métodos para comprar e vender.

23 Respostas

L

Você tem ideia de que classes precisará criar?

R

creio que sim… eu criei uma classe Alimenticio e outra limpeza fiz os construtores e adicionei os getters e setters. mas fiquei pensando em apenas uma classe produtos e dentro dela colocar alimentício e limpeza… mas não sei como. e o complicado é a parte do ArrayList

L

Para fazer todo o programa certo, você deve criar as classes de Alimento e Limpeza corretamente. No exercicício, o professor deixa bem claro que você deve usar uma classe abstrata, ou seja, você deve abstrair alimento e limpeza, que são produtos. Então você tem:

Produto, que pode ser um Alimento ou um produto de Limpeza.

Por que essa abstração? Por que esses itens do mundo real possuem atributos em comum, e que pode ser abstraído (colocado na classe abstrata) e os atributos específicos você coloca no respectivo item.

Antes de criar a classe que controla o estoque, faça essas classes com essa abstração e coloque o resultado aqui para a gente dá uma olhada e ver se está correto.

R

vou tentar, mas creio que não dá mais tempo, pois é para entregar ainda hoje, desde cedo que tento, mas não tinha conseguido, pois o professor simplesmente passou a atividade e não explicou sua resolução… Por exemplo, abstração, entendi agora com sua explicação… mas vou tentar. obg

L

Você sabe fazer herança?

pergunta: Qual a linguagem que você precisa fazer isso?

R

java

L

e Você sabe fazer herança?

R

Sim… Tenho um conhecimento básico, mas é pouco, pois estou começando agora, e as aulas são online

L

Veja esse exemplo. Vou fazer uma abstração de animal:

Classe abstrata Animal:

public abstract class Animal {
	// Aqui vai os atributos e métodos que todo animal tem
}

Classe Cachorro:

public class Cachorro extends Animal {
	// Aqui vai apenas os atributos e métodos que um cachorro tem
}

Classe Passaro:

public class Passaro extends Animal {
	// Aqui vai apenas os atributos e métodos que um pássaro tem
}
R

perfeito… no caso cachorro e pássaro herdam as características/atributos de animal né isso.

L

Sim

R

então cria a classe para o ArrayList… eu tava fazendo assim:

import java.util.ArrayList;
public class Cadastro {
    
    ArrayList<Alimeticio> alimenticio = new ArrayList();
        public void adicionaProduto (Alimeticio produto){
            this.alimenticio.add(produto);
}
     
        public void removerProduto(Alimeticio produto){
            this.alimenticio.remove(produto);
        }
    

    public String listarProdutos(){    
        String lista= "";

for(int i=0;i<this.alimenticio.size();i++){
    Alimeticio produto = this.alimenticio.get(i);
    
    lista += "produto"+ alimenticio.get(i);
}
return lista;
            
    }
}

mas não deu certo… daí apaguei tudo

L

O que seria Alimenticio?

R

é pq eu tinha criado duas classes separadas… Alimenticio e Limpeza… Não tinha feito como o exemplo que vc colocou. A terceira classe eu tava tentando fazer o ArrayList.

R

Amigo, fico grato pela sua ajuda, tou na casa de um amigo que pensei que ele podia ajudar, mas como ele está iniciando tb não pode ajudar muito… tenho que viajar agora, uns 35km… Quando chegar em casa acesso novamente. se puder deixar algumas dicas fico muito grato… consigo pegar rápido as informações. fique com Deus

R

há e esse código que fiz foi apenas para não deixar a atividade em branco, mas agora acredito que sairá coisa melhor.

R

Boa noite. Teria como vc mostrar um exemplo de ArrayList?

L

Veja:

// Cria a lista (ArrayList)
List<Pessoa> lista = new ArrayList<Pessoa>();

// Insere um item na lista
lista.add(new Pessoa());

// Remove o item zero da lista
lista.remove(0);
R

obg pela dica. mas veja minha dúvida… Criar o arraylist eu sei, minha dúvida é o seguinte:

Crie uma classe de cadastro que utilize um ArrayList para realizar o cadastro de produtos. Essa classe possui os seguintes métodos: cadastrar (recebe um produto e adiciona no ArrayList), comprar (recebe um produto e uma quantidade e incrementa o estoque desse produto), vender (recebe um produto e uma quantidade e descrementa o estoque desse produto)

Criar o ArrayList eu sei, mas o que está me confundindo é a parte dos métodos:
comprar (recebe um produto e uma quantidade e incrementa o estoque desse produto), vender (recebe um produto e uma quantidade e descrementa o estoque desse produto)

M

Segue um exemplo bem enxuto da classe de controle. Sem implementação das demais classes.

public class JavaApplication1 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
private List<Alimenticio> listaAlimento;
private List<Limpeza> listaAlimento;

public void cadastrar(Alimenticio alimento) {
    listaAlimento.add(alimento);
}

public void comprar(Alimenticio alimento, Integer qntd) {

    if (qntd <= 0) {
        throw new QuantidadeInvalidaException();
    }

    for (Alimenticio a : listaAlimento) {
        if (alimento.getCod().equal(a.geCod())) {
            a.setEstoque(a.getEstoque() + qntd);
        }
    }
}

public void vender(Alimenticio alimento, Integer qntd) {

    if (qntd <= 0) {
        throw new QuantidadeInvalidaException();
    }

    for (Alimenticio a : listaAlimento) {
        if (alimento.getCod().equal(a.geCod())) {
            if ((a.getEstoque() - qntd) <= 0) {
                throw new EstoqueInsuficienteException();
            } else {
                a.setEstoque(a.getEstoque() - qntd);
            }
        }
    }
}

}

R

obg amigo

R

Bom dia Mateus. muito boa sua explicação. Eu consigo entender a funcionalidade do código, mas tentei criar as outras classe e para que ele funcione e não consegui… Se não for pedir muito, seria possível vc publicar os códigos que originaram esse código principal para que eu possa tirar minha dúvidas e entender melhor, eu ficaria muito grato.

M

Não fiz antes pois estava meio sem tempo. Mas ta aí.

Atente-se aos métodos da classe cadastro. Pois trata-se de um exemplo de polimorfia.

Na classe estoque(classe executável) note que passo um objeto do tipo alimento e um do tipo limpeza como parâmetro do método cadastro da classe cadastro. Este método recebe um Produto como parâmetro. E aí está o polimorfismo.

Pois tanto alimento quanto limpeza estendem a classe produto.

O que isto no diz é! Que tanto Alimento quanto Limpeza são Produtos. Então alimento e limpeza assumem a forma de produto.

Já passar um Alimento em um método que recebe um Limpeza, não é possível. Pois um alimento não é um limpeza, mas sim um produto.

Estoque.rar

Criado 13 de julho de 2016
Ultima resposta 28 de jul. de 2016
Respostas 23
Participantes 3