Eu sei que para gerar valores aleatorios eu uso o Math.random(), porem ele gera somente numeros( double), mas sei trata-los para inteiro.
O que eu quero e preciso fazer é gerar uma sequencia de 16 “bitys” que podem contem Letra e numeros.
alguem sabe como fazer? ou ja tem pronta?
Ps:
O modo como pensei foi gerar um conjunto(vetor) de 8 numeros e um outro conjunto(vetor) de 8 numeros.
depois dentro de um for, mistura-se as posições dos dois vetores, porem acho isso muito trabalhoso e que nao vai dar uma sequencia a mais misturada possivel.
Cara, até tenho uma idéia do que possa dar certo, mas tem dois problemas que se resumem em um só.
1- Você teria que usar os valores da tabela ASCII pra fazer isso
2- Pra usar esses valores teria que rolar um "hard codezinho" de leve.
O problema desse hard code é que se a tabela mudar você teria que mudar seu método também... Compreende o drama?
Além disso a forma que pensei pode gerar um overhead pequeno, mas pode.
Mesmo assim vou colocar aqui o que to pensando e você vê se te resolve...
publicclassExemplo1{publicstaticvoidmain(String[]args){Strings;//String a ser impressaStringBuffersb=newStringBuffer();//StringBuffer para o appendintqtdChars=1;//Qtd de chars na Stringwhile(qtdChars<=16){//String tem que ter 16 charsintcharInt=(int)(Math.random()*71);//Random para gerar um número aleatório até 70//70, porque na tabela ASCII o maior caracter que será necessário é o de nro 70 (F)if(((charInt>=48)&&(charInt<=57))||((charInt>=65)&&(charInt<=70))){//Chars de 48 a 57 são os números//Chars de 65 a 70 são: A, B, C, D, Fcharc=(char)charInt;//Gerando um caracter de acordo com o ASCII gerado pelo random sb.append(c);//Adiciona o char gerado no StringBufferqtdChars++;//Incremente nro de chars no String}}s=sb.toString();//String recebe o StringBuffer que tem a sentença de 16 bytes nesse momento System.out.println(s);//Imprime o String com o resultado}}
Tá aí, cara, foi o que consegui pensar...
Espero que te ajude de alguma forma...
Abraços,
rafaeldiego
eh pimenta, essa foi boa mesmo hein!
B
Bruno_Laturner
Que exagero. Desse modo você está gerando 4 bits por vez, para chegar a 16 bytes, ou 128 bits você precisa executar essa operação 32 vezes, e nem sempre esse random vai cair entre os chars [0-9A-F].
Duas de 64 bits já resolvem o problema.
gpd38
Interessante esse codigo, mas e se eu for guardar em um Long(64 bits), como faço?
pimenta
Bruno, concordo com tudo que disse.
Principalmente o exageiro.
Tanto que coloquei os pontos negativos além do overhead que ele gera, mas o cara queria uma solução e a dei pra ele.
Pra achar os 16 bytes pode ser que o while rode 16 vezes ou pode ser que ele rode milhões de vezes…
Grande rafaeldiego,
Não sei se foi um deboche o seu comentário, mas caso tenha sido porque você não coloca aí um post com a resolução do problema do gpd38?
Abraços,
B
Bruno_Laturner
String com 128 bits em hexadecimal para long?
String s = "0123456789ABCDEF0123456789abcdef";
long long1 = Long.parseLong(s.substring(0, 15), 16);
long long2 = Long.parseLong(s.substring(16, 32), 16);
Obs: Estou fazendo isso de cabeça, pode estar errado.
Edit 1: Faltou um ponto-e-virgula.
Edit 2: Estava genérico demais, não necessitava realizar calculos em cima do tamanho da string.
rafaeldiego
eh pimenta, não havia sido um deboche, muito pelo contrário… era tipo um: “boa ideia hein… se saiu bem”
mas, como percebi que nao está de mto bom humor hoje, desconsidere os comentarios acima, pq eu farei o mesmo
pimenta
Realmente não to muito.
Doido pra dormir… cheio de sono.
Te peço desculpas…
Abraços,
P
Popeye12345
Cara, não seria mais simples gerar um random dentro de um conjunto de Enum? Tem como?
B
Bruno_Laturner
Não entendi a lógica.
P
Popeye12345
O enum teria o seguintes elementos:
(A, B, C, D, E, F, 1,2,3,4,5,6,7,8,9,0)
uma função randomica (que não é Java.util.Random) e preencheria um campo com tamanho X executando o random no enum em cima.
Não sei se isso é possivel, foi só uma idéia e pra peguntar se tem como…
P
Popeye12345
Aliás, enum não. dãaa. Viagem feia. (Acordei agora). Colocaria isso dentro de um array.
B
Bruno_Laturner
Sim, dá pra fazer. Gere um número inteiro entre [0,15], pegue um dos caracteres desse array baseado na posição gerada, concatene na string. Repita quantas vezes quiser.