[RESOLVIDO] Gerar aleatorio

Blz galera

Estou com uma duvida.

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.

Ex de como eu gostaria que ficasse

String valores = 22DCB976D4E26C1C

Já tentou usar a classe java.util.Random?

[code]Random rand = new Random();

String s = Long.toHexString(rand.nextLong()) + Long.toHexString(rand.nextLong());[/code]

Nunca usei nao

Tem como armazenar em um long?

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…

[code]
public class Exemplo1{
public static void main(String[] args){
String s; //String a ser impressa
StringBuffer sb = new StringBuffer(); //StringBuffer para o append
int qtdChars = 1; //Qtd de chars na String

	while(qtdChars <= 16){ //String tem que ter 16 chars
	
		int charInt = (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, F
			char c = (char) charInt; //Gerando um caracter de acordo com o ASCII gerado pelo random		
			sb.append(c); //Adiciona o char gerado no StringBuffer
			
			qtdChars++; //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
}

}[/code]

Tá aí, cara, foi o que consegui pensar…
Espero que te ajude de alguma forma…

Abraços,

eh pimenta, essa foi boa mesmo hein!

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.

Interessante esse codigo, mas e se eu for guardar em um Long(64 bits), como faço?

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,

String com 128 bits em hexadecimal para long?

[code]String s = “0123456789ABCDEF0123456789abcdef”;

long long1 = Long.parseLong(s.substring(0, 15), 16);
long long2 = Long.parseLong(s.substring(16, 32), 16);[/code]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.

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

Realmente não to muito.
Doido pra dormir… cheio de sono.

Te peço desculpas…

Abraços,

Cara, não seria mais simples gerar um random dentro de um conjunto de Enum? Tem como?

Não entendi a lógica.

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…

Aliás, enum não. dãaa. Viagem feia. (Acordei agora). Colocaria isso dentro de um array.

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.