Boa noite, estou criando um controle de estoque bem simples, porem nao consigo continuar por causa dos codigos, preciso que a cada produto salvo, ele crie um codigo unico para ele, por ex:
0001
0002
0003
e assim em diante… os codigos eu salvo em uma ArrayList, e salvo em um arquivo… como faço para apenas chamar o getCodigo? e ele criar automatico o numero em sequencia?
fiz alguns testes mas nenhum deu certo, alguem tem alguma ideia?
Você não está utilizando banco de dados? No banco de dados a chave primária da tabela pode funcionar como campo código do seu produto, tendo em vista que a chave primária funciona como identificador único do registro da tabela.
Em caso negativo vc terá que implementar a lógica no seu programa.
Se você estiver utilizando o Postgres, basta criar dentro da tabela um campo do tipo “SERIAL”, e se for MySql, basta criar um campo do tipo “AUTOINCREMENT”
// Na criação das tabelas do Postgres
CREATE TABLE produto (
id_produto SERIAL NOT NULL,
......
......
......
);
// Na criação das tabelas do MySql
CREATE TABLE `produto` (
'id_produto' int(11) NOT NULL AUTO_INCREMENT,
......
......
);
// Se as tabelas já estiverem criadas, então basta adicionar assim
// No Postgres
ALTER TABLE produto ADD COLUMN id_produto SERIAL NOT NULL;
// ou
ALTER TABLE produto ADD id_produto SERIAL NOT NULL;
// No MySql
ALTER TABLE produto ADD 'id_produto' INT(11) NOT NULL AUTO_INCREMENT;
Pronto, você não precisa fazer mais nada, porque as funções internas desses dois banco de dados fará o auto incremento para você, bastando tão somente e ler o valor desse campo.
Valendo lembrar que esses campos só serão incrementados no momento em que você inserir o registro e for realizado um Commit no Banco, caso contrário o auto incremento não é gerado.
Boa noite amigos, não estou utilizando banco de dados no meu programa, no caso o meu “banco de dados” é a arraylist que guardo em um arquivo serializado…
o problema é justamente esse, implementar a lógica para gerar o cógigo…
não sei como percorrer a arraylist e pegar o maior numero guardado… somar 1, e ainda por no padrao que quero “ooo1”, se nao tiver como isso quebra o galho sem, mas o problema é esse, se tiver algum exemplo ajudaria muito, percorrer a arraylist eu sei, o problema é que nao sei como fazer para pegar o maior numero guardado, somar 1, e setar o novo codigo…
E muito obrigado por sua ajuda discorpio, pois será util em outra aplicação que estou tentado desenvolver também,
Olha só, na verdade agora estou com mais um problema, vamos ver se tu me ajuda também:
criei um método pra criar o código
public void novoCodigo(){
int i_maior = 0;
for(int i = 1; i < produtos.size(); i++) {
int valor = produtos.get(i).getCodigoproduto();
if(valor > i_maior){
int novo = valor + 1;
lbCodigopedido.setText(String.valueOf(novo));
}
}
}
aqui eu fiz pra verificar, quando o usuario vai cadastrar pela primeira vez, ele funciona só se deixar o frame aberto, se eu cadastrar, fechar e voltar para fazer outro cadastro, ele nao cria mais codigo nenhum, se ficar sem a verificação da arraylist, ele funciona normal, so que tenho q fazer um cadatro primeiro manualmente pra funcionar… se alguem souber como arrumar
public void novoCodigo(){
if (produtos.isEmpty()){
lbCodigopedido.setText(String.valueOf(1));
} else {
int i_maior = 0;
for(int i = 1; i < produtos.size(); i++) {
int valor = produtos.get(i).getCodigoproduto();
if(valor > i_maior){
int novo = valor + 1;
lbCodigopedido.setText(String.valueOf(novo));
}
}
}
}
amigo me desculpe pela demora eu estava com problemas, mas ta ai como prometido
public static void main(String[] args) {
// quantidade de sequencias que desejas
Integer quantidade = 10;
String sequencia = "";
for (int i = 1; i <= quantidade; i++) {
Integer valorAlocado = i;
sequencia = completaZerosEsquerda(valorAlocado.toString(), 3);// o 3 é a quantidade de dígitos que vai ter a sequência 3 = 000, 4 = 0000 ...
System.out.println(sequencia);
}
}
// completar com zeros a esquerda
public static String completaZerosEsquerda(String valor, int tamanho) {
String tmp = "";
for (int i = 0; i < tamanho - valor.length(); i++) {
tmp += "0";
}
return tmp + valor;
}
opa, não tem problema wesllhey, tentei fazer sozinho e quase cheguei a solução, mas agora com o seu parece que vai dar certo pois esta bem melhor é claro, vou aos teste e posto mais tarde se deu certo,
so mais uma duvida se tiver problema, que fiz um teste rapido zerando a arraylist, quando isso acontece e vou inserir o primeiro registro, não consigo gerar o novo codigo, somente se ja tiver algum salvo, a partir dai sim, funciona beleza, tentei fazer uma verificação mais em cima com meu codigo e não deu certo, agora vou tentar com o seu usando, nomearraylist.isEmpty(); para ver se da certo
Boa noite wesllhey, bom o codigo funcionou muito bem, bem melhor q minha antiga gambiarra hehehe porem, o unico problema restante foi para verificar se nenhum item foi salvo antes, e começar pelo 0001 por exemplo.
tentei com este codigo para contar o numero de indeces… e nao funcionou
int i_maior = 0;
for(int i = 1; i < produto.size(); i++) {
if (produto.get(i).getCodigoprod() == i_maior ) {
tfCodigo.setText("0001");
}
}
e de outras maneiras tambem, como comparar se indice é diferente de -1… e por ai vai, nenhuma deu certo, se puder ajudar nessa tambem, nao sei se esta faltando alguma coisa, vou seguir tentando fazer o codigo dar certo, e se der espero a ajuda de alguem, obrigado
Amigo primeiro você terá que ver se sua lista tem um tamanho > 0 suaLista.size() se ela for > 0 isso que dizer que já existe valores acionados em sua lista, é interessante que tenha uma sequência inicial e final do tipo int,
tipo quando você for ver se sua lista tem valores então você pega a sequencia final do ultimo elemento de sua lista dessa forma ficara assim
if(suaLista.size() != 0){
// pegando a utima sequência de sua lista pela sequência final que deve ser int, exe: ao salvar uma sequência ela deve ter seqInicial int, seqFinal int e sequencia String
// sua seqInicial = 1 seqFinal = 10 e sequencia = 010
// irá receber 10 da seqFinal
Integer seqFinalAnterior = utimoItemDeSuaLista.getSequenciaFinal();
// sequência atual se baseia pela nova quantidade que será adicionada ex: antes você gerou uma sequência de seqFinal = 10
// dessa forma você tem 10 + a nova quantidade que hipoteticamente é + 10
/// temos uma nova sequência final que é de 20
sequencia.setSeqFinal = seqFinalAnterior + quantidadeAdd
// como nossa ultima sequência foi até 010 o i = seqFinalAnterior + 1 porque 10 da sequência final anterior + 1 para começar a partir de 011
for (int i = seqFinalAnterior + 1; i <= sequenciaFinalAtual; i++) {
Integer valorAlocado = i;
// setando a nova sequencia
sequencia.setSequencia(completaZerosEsquerda(valorAlocado.toString(), 3));
crachaController.insert(cracha);
}
}
Sim acho que ja tentei com uma comparação assim, ou parecida, em um dos testes, ele retornava sim que a lista estava vazia e setava o codigo 0001 para dar continuidade ao proximo codigo que gera os proximos codigos, so que junto com a verificação o codigo que gera os numeros nao funciona, se estiver sozinho funciona, ja tentei tambem por em metodos separados, e fica como se o evento do botao nao funcionasse