Números aleatórios

To tentando fazer uma classe que gere um numero aleatorio entre os valores maximo e minimo recebidos do usuario na linha de comando mas não consigo.

Alguem tem idéia de como inicio isso?

Grato;

Esta utilizando a classe Random da Java API?

http://java.sun.com/j2se/1.3/docs/api/java/util/Random.html

Dica: a classe Random (java.util.Random) tem um método chamado nextInt.

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Random.html#nextInt(int)

Com essa classe é fácil fazer uma continha simples.

Use

import java.util.Random;

Essa é uma classe para gerar números randômicos.

Crie um gerador de números aleatórios

Random rand = new Ramdom();

Para gerar um número entre 10 e 30, por exemplo, faça

int n = rand.nextInt(30) + 10;

Falou!

Não vou postar código, mas a idéia é bem simples:

1 - pegue a diferença dos dois números

2 - use o método random da classe lang.Math para gerar um número aleatório entre 0 e 1

3 - múltiplique o resultado de 2 pelo reultado de 1

4 - adicione o primeiro número ao resultado de 3

só isso

Aham - a expressão acima gera números entre 10 e 39 (que não é exatamente o que você quer), já que nextInt (30) gera números entre 0 e 29.

A conta correta eu deixo como exercício.

Tem um tutorial bacana aqui no GUJ tmbém:

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

Funcionou, mas o único problema é que os valores maximo e minimo deverão ser recebidos do usuario na linha de comando. E isso que ta me deixando grilado.

CÓDIGO FONTE

import java.util.Random;

public class Random12 {

    public static void main(String[] args) {
        
        Random rand = new Random();
        int n = rand.nextInt(60) + 0;

        System.out. println("\nO valor eh " + n);
    }
}

RESULTADO:

C:\Java\Global\Casa\Codigos Fontes>javac Random12.java

C:\Java\Global\Casa\Codigos Fontes>java Random12

O valor eh 8

C:\Java\Global\Casa\Codigos Fontes>

Bom, você já ouviu falar para que serve o parâmetro “args” do seu método “main” e do método “Integer.parseInt”? É isso que você vai ter de usar.

Putz, agora ferrou tudo… hehehe

Eu sei que é mais ou menos isso…

public class Random12 {

    public static void main(String[] args) {
        
        String valor = args[0];
        
        System.out. println("\nO valor eh " + valor);
    }
}

Agora eu não sei como fazer para trazer randomicos.

Se eu usar a classe Math seria possível?

Putz, agora ferrou tudo… hehehe

Eu sei que é mais ou menos isso…

public class Random12 {

    public static void main(String[] args) {
        
        String valor = args[0];
        
        System.out. println("\nO valor eh " + valor);
    }
}

Agora eu não sei como fazer para trazer randomicos.

Se eu usar a classe Math seria possível?

[quote=Fabio Verdi]Funcionou, mas o único problema é que os valores maximo e minimo deverão ser recebidos do usuario na linha de comando. E isso que ta me deixando grilado.
[/quote]

Então…crie um método que receba os valores minimo e máximo e taca no metodo random…e retorna o valor que você vai gerar no mesmo…fica assim mais ou menos


public int gerRandom(int maximo, int minimo)
{
   Random rd = new Random();
   return rd.nextInt(maximo) + minimo;
}

acho qeu dará certo… :oops:

Aqui há dois problemas

a) Não se deve criar um objeto da classe Random a cada vez que você o usa porque ele vai dar resultados iguais, se os dois objetos forem criados no mesmo milissegundo. Ponha a criação desse objeto fora desse método (como um membro da classe, por exemplo.)

b) a conta certa é

rd.nextInt (maximo - minimo + 1) + minimo

[quote=thingol][quote=akumaldo]


public int gerRandom(int maximo, int minimo)
{
   Random rd = new Random();
   return rd.nextInt(maximo) + minimo;
}

[/quote]

Aqui há dois problemas

a) Não se deve criar um objeto da classe Random a cada vez que você o usa porque ele vai dar resultados iguais, se os dois objetos forem criados no mesmo milissegundo. Ponha a criação desse objeto fora desse método (como um membro da classe, por exemplo.)

b) a conta certa é

rd.nextInt (maximo - minimo + 1) + minimo

[/quote]

Aaaaahhh obrigado pela correção… :oops: não estava em casa não pude testar e ver como saia…
mas realmente se for criado 2 objetos ao mesmo tempo vai dar esse problema por que eles vão pegar a mesma seed…a opção é deixar fora da classe como você mesmo falou! :smiley:

Este tópico comprova que mesmo um assunto relativamente simples (geração de números aleatórios) pode render muito…

De modo geral:

  • Para gerar um número aleatório (double) com distribuição uniforme, no intervalo de 0.0 (inclusive) a 1.0 (exclusive): use Math.random() ou crie um objeto da classe java.util.Random, e chame o método nextDouble()
  • Para gerar um número aleatório (int) com distribuição uniforme, no intervalo de 0 a N - 1, crie um objeto java.util.Random, e chame nextInt(N).
  • Para gerar um número aleatório (long) com distribuição uniforme, no intervalo de 0 a N - 1, crie um objeto java.util.Random, e chame nextLong(N).
  • Para gerar um número aleatório (int) com distribuição uniforme, no intervalo de M até N, crie um objeto r do tipo java.util.Random, e chame r.nextInt (N - M + 1) + M.
  • Para gerar um buffer com números aleatórios (byte[]), crie um array de bytes com o tamanho desejado, crie um objeto java.util.Random, e chame nextBytes().
  • Para gerar um número aleatório (double) com distribuição gaussiana (ou “normal” - veja que “normal” não é a mesma coisa que “uniforme”!), com média 0.0 e desvio-padrão 1.0, chame nextGaussian().

galera alguem sabe se tem como por exemplo…eu quero pegar valores aleatorios de 1 a 5, mas eu irei pegar esses 5 valores então nao poderiam repetir…por exemplo eu pegaria o valor 1 dai depois 3,5,4,2
entendeu?
eu quero recuperar os 5 numeros mas aleatorios

alguem sabe me dizer algo?

ixi fiz umas gambi aqui e deu certo hehehe

bom por enquanto vou deixando assim se alguem souber um jeito simples de se fazer por favor compartilhe comigo.

qq hora eu volto para ver se alguem teve uma ideia bacana

valew galera

das 2, 1:

ou vc cria um array de numeros e altera a posição deles no array de forma randomica

ou vc vai gerando os numeros e vai guardando em um array - ao sortear o proximo veja se ja saiu, se ja, sorteie de novo.