Ir para conteúdo


Revista PROGRAMAR – Edição 46 (Setembro 2014): Download já disponível!

- - - - -

Numeros Aleatórios


  • Por favor inicie sessão para responder
8 respostas a este tópico

#1 NameException

NameException

    Boolean User

  • Membro
  • PipPipPip
  • 159 mensagens

Publicado 23 de Junho de 2006 - 10:40

Boas, ppl....

Tou a desenvolver uma aplicação em JAVA, para simular o sorteio do euromilhões, mas não estou a conseguir gerar numeros aleatórios..... Alguem me pode dar uma dica?

#2 Knitter

Knitter

    Stack Overflow

  • Membro
  • PipPipPipPipPipPipPip
  • 6135 mensagens

Publicado 23 de Junho de 2006 - 16:11

Basta invocares o método Math.random()
EX: gerar números até 10

Math.random() * 10 ... humm não me lembro se assim funciona sempre :hmm:... tenho de ir ver, mas é a class Math que tens de usar ;)

#3 Dabubble

Dabubble

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 23 de Junho de 2006 - 19:20

O gerador de numeros aleatorios que vem com java é mau (nao e la muito "aleatorio") e alem disso nao da para repetir um determinado sorteio. de quealquer forma e para uma coisa basica funciona e e como o Knitter disse Math.random(), isto gera um numero aleatorio (baseado no tempo do sistema) entre 0 e 1 depois so tens de multiplicar ou  arrendondar para obteres numeros no intervalo que quiseres.

#4 NameException

NameException

    Boolean User

  • Membro
  • PipPipPip
  • 159 mensagens

Publicado 24 de Junho de 2006 - 15:35

Ok, mas dessa forma, saem numeros repetidos numa unica extracção.... Há forma de contornar esse problema...???

#5 Knitter

Knitter

    Stack Overflow

  • Membro
  • PipPipPipPipPipPipPip
  • 6135 mensagens

Publicado 26 de Junho de 2006 - 14:42

Citar

..nao e la muito "aleatorio"..
Em computadores não existe número aleatório nenhum que seja aleatório :P, mas tens razão o do Java não é grande coisa, agora que penso nisso nem sei se dá para mudar a semente dos números, hum... tenho de ver isso.

Citar

...saem numeros repetidos numa unica extracção..
Não percebi, cada vez que chamas o Math.random() dá o mesmo número? Eu usei em vários programas e nunca tive problemas, dentro de 'fors' ou 'whiles', etc, tens de ter atenção que o número gerado é entre 0 e 1, se o converteres para inteiro dá sempre 0!, mas já deves saber isso :)

#6 Dabubble

Dabubble

    Try-Catch User

  • Membro
  • PipPipPipPip
  • 334 mensagens

Publicado 26 de Junho de 2006 - 21:34

lol nao, ele quer e apenas retirar numeros diferentes sempre (tipo as bolas do euromilhoes), isso e uma questao de pensar uma beka... :P

#7 AndreSabino

AndreSabino

    null

  • Novo Membro
  • Pip
  • 1 mensagens

Publicado 28 de Junho de 2006 - 21:39

Olá a todos.
É o meu primeiro post neste fórum e gostava de conseguir ajudar. =)
Na realidade é possivel gerar números "verdadeiramente aleatórios", com base no tempo do relogio (ex:  System.currentTimeMillis(); ) ou de outras formas.
Ao contrário dos algoritmos de geração de numeros "psedo-aleatorios", nos quais aos reeniciar o programa ele gera numeros que já tinha gerado noutro fluxo de execução, desta forma isso não acontece.
Podes "personalizar" algumas funções que já existem (procura "RandomGUID" no Google), por forma a que te sejam devolvidos apenas digitos (e não letras). Da mesma forma podes definir o tamanho daquilo que queres que seja devolvido (comprimento 2, 5, 10, ...).
Provavelmente também é possivel definir o intervalo de número que queres( 0 < x < 50), no entanto, caso não seja possivel (o que acho ser o mais provável), podes sempre fazer uma verificação adicional (se o numero gerado está entre X e Y, tudo bem; caso contrario gero outro e verifico novamente;)

Gostava que este primeiro post tivesse ajudado de alguma forma.
Boa sorte para o trabalho!

Abraço a todos!
André

#8 Knitter

Knitter

    Stack Overflow

  • Membro
  • PipPipPipPipPipPipPip
  • 6135 mensagens

Publicado 30 de Junho de 2006 - 11:18

Citar

Na realidade é possivel gerar números "verdadeiramente aleatórios", com base no tempo do relogio (ex:  System.currentTimeMillis()
O que faz com que sejam mais variados mas não "verdadeiramente aleatórios". Neste caso o que se faz é mudar a base dos cálculos, a semente dos números, no entanto não deixam de ser número cálculados, um processador não tem capacidade de "inventar" números, apenas de os calcular e isso faz com que não sejam aleatórios.

Mas Andre tens razão e acho que não falamos nisso, para se obter números mais variados é necessário usar o tempo de relógio como base.

Peace.

#9 TaoOo

TaoOo

    void

  • Membro
  • PipPip
  • 30 mensagens

Publicado 30 de Junho de 2006 - 17:52

podes criar um vector com 50 posicoes, fazes random de uma posicao e eliminas essa posicao/numero, assim esse numero ja nao pode sair...