Usando método random da classe Math

Olá pessoal. Gostaria de saber como utilizar o método que gera números aletórios Math.random, porém limitando a ocorrência de um número, no caso o 0. Além disso, como faria para que ele não repetisse os números “sorteados”?

Muito obrigado.

fala jjflash… tranquilo…?

cara dá uma olhada nesse link:

http://www.guj.com.br/java.artigo.17.1.guj

:wink:

se vc quiser usando o metodo random da classe Math tb funcina desse jeito:

vc cria um array com as possibilidades q vc quer, depois vc sorteia um numero com o Math.random() que sera a posicao do array, dai vc pega o valor e copia o ultimo valor “valido” do array para a posicao q tinha sido sortiada, depois eh soh repetir o processo assumindo que o array esta 1 elemento menor. um ex que gera numeros de 1 a 100 sem repetir:

public class Exemplo{
 int tamanho = 100;
 int array[] = new int[tamanho];
 public Exemplo(){
 for (int i = 0; i < tamanho; i++) array[i] = i + 1;
 }
 public int next(){
  if (tamanho == 0) throw new RuntimeException("Nao a mais numeros");
  // amarzena em x um numero de  0 a tamanho
  int x = (int)(Math.random() * tamanho);
  // grava o resultado a retornar
  int resultado = array[x];
  // diminui o array e substitui o elemento sorteado
  array[x] = array[--tamanho];
  return resultado;
 }
}

OBS: eu dei uma olhada nesse artigo, e achei interecante, porem ao q me parece ele n ha garantia de que nao havera repeticao de numeros…

Existe uma maneira de evitar que não apareçam os números sorteados:

  • verificar se o número já foi sorteado, e se ele já foi, tentar de novo.
    Sério, você tem de fazer isso mesmo (a menos que você crie seu gerador de números aleatórios específico para a sua aplicação. É possível escolher os parâmetros de forma que os números percorram uma seqüência de 0 a n-1 sem repetições - uma aplicação dessas seria um “screen saver” daqueles que pintam a tela aleatoria e progressivamente.)
    Usando Math.random ou java.util.Random (mais fácil de usar no seu caso, que requer só números inteiros), você precisa guardar os números que já sorteados em algum lugar (como um array, ou um TreeSet, que já deixa os números em ordem e fáceis de achar).

Outra forma, que é mais estúpida mas é mais fácil de codificar, é a seguinte:

  • gere um array com todos os números que podem ser sorteados (por exemplo, de 1 a 60 para a Sena).
  • Use Arrays.shuffle para “embaralhar” o array.
  • Pegue apenas os primeiros N números (no caso da sena, os primeiros 6 elementos do array).

Todas as idéias acima são boas idéias, inclusive a última thingol. Obrigado a todos.

Abraço e Long Live Rock’n’Roll