Olá!
Preciso de ajuda.
O usuário irá entrar com os números inicial e final, e o sistema deverá gerar os sequenciais desses números.
Por exemplo: Número inicial: @964987484 300217684008 e Número final: @964987484 300217684015
Qual o método para gerar esses sequenciais longos e que reconheça o arrouba?
Esse espaço em branco no meio do número é parte da entrada do usuário?
Esse número do prefixo será sempre o mesmo?
Se for sempre o mesmo, você pode iterar entre a segunda parte do número usando o tipo long.
Senao, você pode ignorar o arroba, e usar o tipo BigInteger
S
sandy
O espaço em branco faz parte da entrada
Esse número do prefixo será sempre o mesmo? Sim só mudará os finais
O arrouba sempre terá que aparecer no inicio do numero de serie.
O usuário que entrará com os valores inicial e final, portanto não serão esses mesmos valores, somente a quantidade de caracter que é no total de 23.
S
staroski2 likes
Eu criaria uma classe Intervalo com os atributos inicio e fim e uma classe Sequencial que recebe um objeto Intervalo como parâmetro e tenha um método proximoNumero().
A formatação do @ e do espaço você faz ai onde preferir.
Isso resolve chefe???
S
staroski
Já aprendeu POO?
S
sandy1 like
tô aprendendo
S
staroski1 like
Veja esta classe:
importjava.math.BigInteger;publicclassSequencia{privatefinalBigIntegerinicio;privatefinalBigIntegerfim;privateBigIntegeratual;publicSequencia(Stringinicio,Stringfim){this.inicio=converterParaNumero("inicio",inicio);this.fim=converterParaNumero("fim",fim);this.atual=this.inicio;}publicbooleantemProximo(){returnatual.compareTo(fim)<0;}publicStringproximo(){if(temProximo()){atual=atual.add(BigInteger.ONE);}returnatual();}publicStringatual(){returnformatar(atual);}privatestaticStringformatar(BigIntegernumero){StringBuildertexto=newStringBuilder(numero.toString());while(texto.length()<21){texto.insert(0,'0');}texto.insert(9,' ');texto.insert(0,'@');returntexto.toString();}privatestaticBigIntegerconverterParaNumero(Stringnome,Stringtexto){if(texto==null){thrownewIllegalArgumentException("Parâmetro "+nome+" não pode ser null");}if(texto.length()!=23){thrownewIllegalArgumentException("Parâmetro "+nome+" precisa ter 23 caracteres");}if(!texto.matches("@\\d{9} \\d{12}")){thrownewIllegalArgumentException("Parâmetro "+nome+" precisa começar com '@' seguido de 9 dígitos mais um espaço em brancho seguido de 12 dígitos.");}Stringnumero=texto.substring(1,10)+texto.substring(11,23);returnnewBigInteger(numero);}}
Olá!
Analisando o numero de serie “@964987484 300217684008” para gerar os sequenciais. Vi que o sequenciais são gerados nos primeiros nove números.
os demais são fixos.
Então: "@964987484 300217684008"
vou precisar gerar os sequenciais desses numeros: 964987484
Depois pegar cada sequencial gerado e concatenar com o “@” e os segundos grupos de numeros: “300217684008”.
Para gerar os sequenciais fiz algo que com mais experiência dá pra melhorar.
Stringteste=(jtxtNsInicio.getText());String[]vetor=teste.split(" ");Stringaqui=vetor[0];//lê o @ Stringali=vetor[1];//lê os números
//Esse segundo é para quebrar o valor fim String teste2 = (jtxtNSFim.getText());
String[] String = teste2.split(" "); //Aqui testa o
valor fim String valfim = String[0]; //Lê o @ String num = String[1]; //
for(Stringnome:vetor){aqui=aqui.replace("@","");//tira arrouba do numero de serie inicialvalfim=valfim.replace("@","");//tira arrouba do numero de serie finalSystem.out.println(nome);System.out.println("Peimeiros numeros: "+aqui);//Os numeros sem o "@" intnumero=Integer.parseInt(aqui);//inicialintvalfim1=Integer.parseInt(valfim);//finalfor(inti=numero;i<=valfim1;i++){StringBuildernumeroDeSerie=newStringBuilder();Stringvalor;// valor = String.valueOf(i);// numeroDeSerie.append(valor); numeroDeSerie.append(i);// numeroDeSerie.append(String.valueOf(i)); //Aqui gera o número sequencial // System.out.println("Sequencial: " + aqui);System.out.println("NS "+numeroDeSerie);}}returnfalse;}