Acontecimento sobrenatural com Random :P

6 respostas
M

olá galera, sou novo aqui no fórum…estou fazendo um jogo em java ME, só pra aprender mesmo nada sério…só que estou com um problema no meu código
numa parte lá realizo um sorteio de um numero com o metodo:

public int sorteia() {
    Random r = new Random();
    int H = getWidth();
    int L = 1;
    return (int)(r.nextFloat()*(H-L))+L;
}

ai uso umas vars la pra guarda os numeros

int s = sorteia();
int s2 = sorteia();

por incrivel que pareça, esse programa endiabrado sorteia sempre o mesmo valor, eu já criei outra classe normal, testei e deu certo, só nessa ai que não dá, esse método não ta numa classe java normal ta num app de gamecanvas…isso pode fazer alguma diferença? Thanks

6 Respostas

ViniGodoy

Verifique se H-L por acaso não dá 0.

M

não dá cara, tipo ele sorteia lá um numero:

se o s fica com 230 s2 tbm fica com 230
se s fica com 1 s2 tbm fica com 1 entendeu…
quando executo ele gera valor diferente entre as execuções mas as variaveis as 2 pegam o mesmo valor

T

mdill:
olá galera, sou novo aqui no fórum…estou fazendo um jogo em java ME, só pra aprender mesmo nada sério…só que estou com um problema no meu código
numa parte lá realizo um sorteio de um numero com o metodo:

public int sorteia() {
    Random r = new Random();
    int H = getWidth();
    int L = 1;
    return (int)(r.nextFloat()*(H-L))+L;
}

Nunca instancie um novo objeto da classe Random dentro de um método de sorteio; é aconselhável usar um objeto estático dessa classe, para evitar esse problema. De fato, “new Random” faz o seguinte: inicia um gerador de números aleatórios com o valor de System.currentTimeMillis. Se você chamar “sorteia” 10 vezes dentro do mesmo milissegundo, “new Random” vai gerar 10 objetos que estão instanciados com o mesmo valor, e vai retornar 10 resultados iguais.

O recomendado seria fazer algo como:

private static Random r = new Random();
public int sorteia() {
    int H = getWidth();
    int L = 1;
    return (int)(r.nextFloat()*(H-L))+L;
}
M

deu certo agora haha, não entendi mto o que vc falo, mas blz!
valeu ai cara! :smiley:

ViniGodoy

mdill:
deu certo agora haha, não entendi mto o que vc falo, mas blz!
valeu ai cara! :smiley:

Procure, então, entender antes de continuar programando… programar por tentativa e erro é uma das piores práticas que existem.

M

valeu pelo conselho!

Criado 14 de janeiro de 2009
Ultima resposta 14 de jan. de 2009
Respostas 6
Participantes 3