Contagem

Boa Tarde galera!
Estou fazendo um DAV (Documento Auxiliar de Venda) e meu problema está na contagem do mesmo.
Toda vez que eu abrir um novo DAV tem um campo JText que precisa realizar sempre uma contagem.
É necessario de 10 a 13 numeros. Exemplo: contagem inicia em 0000000001 até 9999999999, após isso a contagem reinicia.
Fiz algo parecido com isso, mas não deu certo.

[code] private void contabilizaDav() {
double numDav = ArrangeFields2.getDoubleDecimal(view.getTxtNumDav().getText());

    for (double i = 1;i <=999999999; i ++){
    view.getTxtNumDav().getText(ArrangeFields2.decimals(op.soma(numDav,i ),2));
    }
}[/code]

Alguem tem alguma ideia de como posso fazer isso?

Alguem?

Essa tá dificil de entender.

Entendi errado ou vc quis dizer que esse tal DAV tem um campo texto que precisa ter
um número entre 10 e 13 digitos originado num contador long, é isso?

Tá, se for isso você coloca um

atributo private static long numero = 0;

E na classe, no construtor você faz um

numero++

para que ele seja acrescido em 1 toda vez que a um novo DAV for instanciado e

E se você precisa ele com formato com zeros a esquerda, crie uma função

que transforme o long em String, veja o tamanho da String e concatene Zeros a esquerda
até o tamanho necessário, algo assim:

public String colocarZerosEsquerda(String texto, int qtd){
        String ret = "";
        if(texto.length()==qtd)
            return texto;
        for(int i=texto.length(); i<qtd; i++)
            ret += "0";
        
        ret += texto;
        return ret;
    }

É exatamente isso que voce entendeu!
Muito Obrigado.
Vou tentar fazer usar o long e, caso de certo postarei o resultado aqui.

Olha esse dois códigos em anexo,

eles devem resolver teu problema

Coloca eles num projeto separado e observa o que acontece.

Observe que não é só usar o long,

essa variavel tem que ser static

isso faz com que ela seja única para todas
as instancias criadas.

É como criar uma variável de classe, não
de instancia.

assim o contador não se perde, cada ++
que ele recebe vai partir dele na próxima
instanciacao.

Se for uma informação que precisa ser persistida na base de dados. Considere o uso de SEQUENCE no seu SGBD, pode ser viável.

Sim, o Jhonny Oliveira tem razão.

Se esse número de ADV tiver de ser único, é bom persistir no banco e recuperar a
cada iniciação do sistema.

Por que o contador estático começa do zero a cada iniciação do sistema.

Então o melhor, toda vez que um novo DAV for criado, é fazer um select no banco
pedindo o MAX(numeroDAV), somar mais 1, formatar com os zeros e continuar
dalí.

Note que estamos falando do valor long, nao da String formatada. Ela pode
aparecer numa coluna do banco, mas não serve para controlar qual é o maior
valor até aquele momento.

[quote=Johanny]Boa Tarde galera!
Estou fazendo um DAV (Documento Auxiliar de Venda) e meu problema está na contagem do mesmo.
Toda vez que eu abrir um novo DAV tem um campo JText que precisa realizar sempre uma contagem.
É necessario de 10 a 13 numeros. Exemplo: contagem inicia em 0000000001 até 9999999999, após isso a contagem reinicia.
Fiz algo parecido com isso, mas não deu certo.

[code] private void contabilizaDav() {
double numDav = ArrangeFields2.getDoubleDecimal(view.getTxtNumDav().getText());

    for (double i = 1;i <=999999999; i ++){
    view.getTxtNumDav().getText(ArrangeFields2.decimals(op.soma(numDav,i ),2));
    }
}[/code]

Alguem tem alguma ideia de como posso fazer isso?[/quote]

Mesmo que o que eu mostrar aki nao te sirva totalmente, creio que da pra aproveitar algumas ideias:

public class MyNumber {

    static long max;
    static long number;

    static void begin() {
        number = 0;
        if (max == 0) {
            setMaxDigits(9); // default
        }
    }
    
    static void setMaxDigits(int digits) {
        String string = "9";
        while (string.length() < digits) {
            string += string;
        }
        max = Long.parseLong(string);
    }

    static String getNumber(long number) {
        number = number++ % max;
        String string = String.valueOf(number);
        while (string.length() < 13) {
            string = "0" + string;
        }
        return string;
    }
}

[]'s