Gerar Random de -0.9 a 0.9

3 respostas
A

Pessoal, preciso fazer um random de -0.9 a 0.9 para fazer um cálculo de uma rede neural.

O que consegui foi utilizar os métodos a seguir:
// Gera números aleatórios para os pesos sinápticos
	public static double geraRandom(){
		Random random = new Random();
		double num = random.nextFloat()%0.9;
		return num;
	}
	
	// Gera um random de booleano para fazer o negativo e positivo
	public static void geraRandomBoolean(){
		Random random = new Random();
		negpos = random.nextBoolean();
	}

	// Gera os pesos da camada de entrada
	public static void geraPesosCamEntrada(){
		alimentaNeuronios();
		int n=1;
		double valor=0;
		while ( n!=0){
			geraRandomBoolean();
			if (negpos == true){
				valor = geraRandom();
			}else{
				valor = geraRandom()*(-1);
			}

		System.out.println(valor);
		n=Keyboard.readInt();
		}
	}

Fiz algumas gambiarras para conseguir números negativos, pois só consigo fazer o random acima de 0. Então criei outro randon booleano que conforme o resultado ele multiplica por -1.

Até aí tudo bem, mas o que está ocorrendo é que para o método Random ele pega como seed os milisegundos do relógio [b]public Random() { this(System.currentTimeMillis()); } então o que me ocorre é que se eu gero ele assim direto, ele adiciona muitas linhas com o mesmo número, o intervalo entre ele repete o mesmo código umas 100 vezes antes de mudar. O que consegui foi fazer que a cada número gerado, eu tenha que apertar uma tecla, para que seja gerado o próximo, daí ele gera diferentes pois não está no mesmo milisegundo.
Tem como fazer algo para que ele espere uns 10 milisegundos antes de gerar o próximo número? dar uma pausa com tempo programado para o sistema.[/b]

Conseguiram entender? hehe
Obrigado.
Att.
Alexander

[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - Ratinho[/color][/size] :joia:

3 Respostas

C

Olá alexmaoli,

Você não precisa criar um objeto Random pra cada geração de números. Você pode criar só um, e usar sempre o mesmo. Isso resolve o seu problema do tempo, ao mesmo tempo que economiza memória, pois não há necessidade de se ter sempre um objeto distinto (ou tem?).

Até mais,

F

Acho melhor tu usar

java.security.SecureRandom
A

Valeu CD1, era isso mesmo, foi só instanciar ele uma única vez que resolveu. hehehe
Coisas de iniciante.
Obrigado galera.
Att.
Alexander

“CD1”:
Olá alexmaoli,

Você não precisa criar um objeto Random pra cada geração de números. Você pode criar só um, e usar sempre o mesmo. Isso resolve o seu problema do tempo, ao mesmo tempo que economiza memória, pois não há necessidade de se ter sempre um objeto distinto (ou tem?).

Até mais,

Criado 8 de junho de 2006
Ultima resposta 8 de jun. de 2006
Respostas 3
Participantes 3