Usando ArrayList

4 respostas
programaçãojavaarraylist
B

Tenho que fazer uma programação em java na qual o usuário cadastra uma peça e ela é armazenada no estoque, a partir desse cadastro deve ser feita a entrada e saída de peças.
Concatenei todos os valores da peça em uma variável do tipo String e usei o ArrayList.add pra criar meu estoque.
Mas preciso tratar separadamente a quantidade de peças que foram adicionadas e usar o nome pra fazer a busca.
Como faço pra adicionar por meios de vetores para que eu consiga manipular as variáveis separadamente?

Essa é a programação até agora:
package Projeto1;

import java.util.<em>;

import javax.swing.</em>;

import java.text.SimpleDateFormat;

public class Projeto {

public static void main(String[] args) {
    String sData = "dd/MM/yyyy";
    String sHora = "h:mm:ss - a";
    String sData1, sHora1;
    Date agora = new java.util.Date();
    SimpleDateFormat sdfFormata = new SimpleDateFormat(sData);
    sData1 = sdfFormata.format(agora);
    sdfFormata = new SimpleDateFormat(sHora);
    sHora1 = sdfFormata.format(agora);
    boolean bResposta = true, bNome;
    String sAux, sQtd = null, sNome = null, sLote = null, sCodigo = null, sDescricao = null;
    int iQtd = 0, iQtdItens = 0, iI, iItens, Estoque = 0, iNav = 0;
    ArrayList<String> aItens = new ArrayList<>();
    do {
        Object[] oMenu = {"Cadastrar uma nova peça", "Estoque", "Controle de saída de peças", "Conferir entrada e saida de peças", "Sair"};
        Object menu1;
        menu1 = JOptionPane.showInputDialog(null, "Bem vindo(a) a NtC-Peças. \n Selecione a opção desejada:", "Selecione a opção desejada: \n", JOptionPane.PLAIN_MESSAGE, null, oMenu, "não");
        if (menu1.equals("Cadastrar uma nova peça")) {
            try {
                sNome = JOptionPane.showInputDialog(null, "Nome da peça: ", "Insira", JOptionPane.PLAIN_MESSAGE);
                bNome = aItens.contains(sNome);
                if (bNome == true) {
                    JOptionPane.showMessageDialog(null, "Essa peça já está cadastrada!", "ERRO!", JOptionPane.ERROR_MESSAGE);
                }
                try {
                    sCodigo = JOptionPane.showInputDialog(null, "Código(6 dígitos): ", "Insira", JOptionPane.PLAIN_MESSAGE);
                    while (sCodigo.length() != 6) {
                        JOptionPane.showMessageDialog(null, "Insira um código válido de 6 dígitos!\n Somente numeros!", "ERRO", JOptionPane.ERROR_MESSAGE);
                        sCodigo = JOptionPane.showInputDialog(null, "Insira o código do item que deseja cadastrar", "Cadastro de itens", JOptionPane.PLAIN_MESSAGE);
                    }
                    sLote = JOptionPane.showInputDialog(null, "Lote: ", "Insira", JOptionPane.PLAIN_MESSAGE);
                    while (sLote.length() > 3) {
                        JOptionPane.showMessageDialog(null, "Insira um lote válido de 3 ou menos dígitos!", "ERRO", JOptionPane.ERROR_MESSAGE);
                        sLote = JOptionPane.showInputDialog(null, "Código(6 dígitos): ", "Insira", JOptionPane.PLAIN_MESSAGE);
                    }
                    iQtd = Integer.parseInt(sAux = JOptionPane.showInputDialog(null, "Quantidade de " + sNome + "s: ", "Insira", JOptionPane.PLAIN_MESSAGE));

                    while (iQtd == 0) {
                        JOptionPane.showMessageDialog(null, "A quantidade não pode ser igual a 0", "ERRO", JOptionPane.ERROR_MESSAGE);
                        iQtd = Integer.parseInt(sAux = JOptionPane.showInputDialog(null, "Quantidade de" + sNome + "s: ", "Insira", JOptionPane.PLAIN_MESSAGE));
                    }
                } catch (ArithmeticException erro) {
                    JOptionPane.showMessageDialog(null, "O valor não pode ser 0!", "ERRO", JOptionPane.ERROR_MESSAGE);
                } catch (NumberFormatException erro) {
                    JOptionPane.showMessageDialog(null, "Insira apenas caracteres numéricos", "ERRO", JOptionPane.ERROR_MESSAGE);
                }
                sDescricao = JOptionPane.showInputDialog(null, "Descrição: ", "Insira", JOptionPane.PLAIN_MESSAGE);
            } catch (NullPointerException erro) {
                JOptionPane.showMessageDialog(null, "Certifique-se de que todos os campos estão preenchidos");
            }
            JOptionPane.showMessageDialog(null, "Cadastro realizado com sucesso!", "Cadatsro", JOptionPane.PLAIN_MESSAGE);
            JOptionPane.showMessageDialog(null, "Nome: " + sNome
                    + "\nLote: " + sLote
                    + "\nCodigo: " + sCodigo
                    + "\nQuantidade: " + iQtd
                    + "\nDescrição: " + sDescricao
                    + "\nData de cadastro: " + sData1
                    + "\nHora de cadastro: " + sHora1, "Consulta de item", JOptionPane.PLAIN_MESSAGE);

            String sItens = ("Nome: " + sNome
                    + "\nLote: " + sLote
                    + "\nCodigo: " + sCodigo
                    + "\nQuantidade: " + iQtd
                    + "\nDescrição: " + sDescricao
                    + "\nData de cadastro: " + sData1
                    + "\nHora de cadastro: " + sHora1);
            aItens.add(sItens);
        }
        if (menu1.equals("Estoque")) {
            for (iI = 0; iI <= aItens.size(); iI++) {
                JOptionPane.showMessageDialog(null, "Estoque:\n" + aItens.get(iI), "Consulta do estoque", JOptionPane.PLAIN_MESSAGE);
            }
        }
        if (menu1.equals("Controle de saída de peças")) {
            String sPeça = JOptionPane.showInputDialog(null, "Nome da peça que deseja tirar: ", "Insira", JOptionPane.PLAIN_MESSAGE);
            aItens.indexOf(sPeça);

            int iTPeça1, iTPeça;
            iTPeça = Integer.parseInt(JOptionPane.showInputDialog(null, "Quantidade que quer retirar: ", "Insira", JOptionPane.PLAIN_MESSAGE));
            iTPeça1 = iQtd - iTPeça;
            JOptionPane.showMessageDialog(null, "Quantidade de peças atual: " + iTPeça1, "Resultado", JOptionPane.PLAIN_MESSAGE);

        }
        if (menu1.equals("Conferir entrada e saida de peças")) {

        }

        if (menu1.equals("Sair")) {
            System.exit(0);
        }

    } while (bResposta == true);

}

}

4 Respostas

T

Para começar, ao invés de concatenar os dados numa String única, crie uma classe para armazenar os atributos. Algo como:

class ItemDeEstoque{
  String descricao;
  int lote; // obs: veja se o lote precisa ser string
  int codigo; // obs: veja se o codigo precisa ser string
  float quantidade;
  Date dataEHoraDeCadastro;

  public ItemDeEstoque(String descricao, int lote, int codigo, float quantidade, Date dataCadastro){
    this.descricao = descricao;
    this.lote = lote;
    this.codigo = codigo;
    this.quantidade = quantidade;
    this.dataEHoraDeCadastro = dataCadastro;
  }

// getters e setters necessários, e sobrescrever o método toString()
}

No seu ArrayList, você adiciona objetos dessa classe ao invés de Strings:

List<ItemDeEstoque> estoque = new ArrayList<>();

ItemDeEstoque itemQualquer = new ItemDeEstoque("Livro sobre OO", 1, 1, 100, new java.util.Date());

estoque.add(itemQualquer);

Abraço.

B

@TerraSkilll Muito obrigada pela dica, mas ainda assim não entendi como eu farei para adicionar em determinadas posições e depois poder buscá-las. Sou iniciante em java e estou tendo dificuldade. Busquei em diversos lugares mas ainda assim não consegui entender como devo fazer, se você puder me ajudar agradeço imensamente!

T

O que você quer dizer com determinadas posições e por que isso é necessário? Uma das versões do método add() da classe ArrayList aceita um parâmetro indicando a posição que você deseja inserir. Então você pode fazer algo como:

List<String> listaQualquer = new ArrayList<>();
listaQualquer.add(0, "NomeDoMeio"); // a primeira posição é de índice zero, não se esqueça
listaQualquer.add(0, "PrimeiroNome"); // "NomeDoMeio" passa para a segunda posição do ArrayList
listaQualquer.add(2, "Sobrenome");

Só que, se a ordem de inserção não é importante, você não precisa usar esse método. O add() que mostrei no post anterior já insere na última posição, que é o suficiente para a maioria dos casos.

Para a busca, é só uma questão de fazer um loop no Arraylist e comparar os dados da posição atual com o que deseja procurar. Por exemplo:

ItemDeEstoque item1 = new ItemDeEstoque("Celular", 1, 1, 100, new java.util.Date());
ItemDeEstoque item2 = new ItemDeEstoque("Notebook", 1, 1, 100, new java.util.Date());
ItemDeEstoque item3 = new ItemDeEstoque("Calculadora", 1, 1, 100, new java.util.Date());

estoque.add(item1);
estoque.add(item2);
estoque.add(item3);

// ......

// faz a busca pelo item de nome Notebook
String itemABuscar = "Notebook";

int posicao = -1;

// é preciso criar o método getDescricao() na classe ItemDeEstoque
for(int i = 0; i < estoque.size(); i++){
  if (itemABuscar.equals(estoque.get(i).getDescricao()){
posicao = i;
  }
}

Isso vai colocar na variável posicao o índice do item que você está procurando. Daí você pode fazer algo como:

ItemDeEstoque itemQueEuQuero = estoque.get(posicao);

Recomendação geral: estude sobre coleções.

Abraço.

B

Eu precisaria usar determinada posição, para quando for necessário fazer uma busca por nome (no caso de saida de peças) ou então alterar a quantidade em estoque.

Criado 23 de setembro de 2017
Ultima resposta 25 de set. de 2017
Respostas 4
Participantes 2