numero aleatorio entre um limite (5 e 10 por exemplo)

Java

09/04/2009

Boa tarde, Alguem me podes explicarcomo calcular um numero aleatorio entre um limite, por exemplo entre 5 e 10? Obrigado Nuno
Nunomartins_01

Nunomartins_01

Curtidas 0

Melhor post

Luiz Pereira

Luiz Pereira

09/04/2009

[quote="olisses"]5+5*(int)Math.random();
Uma pequena correção: 5+(int)( 6*Math.random() ) - O cast deve ser feito depois da multiplicação, senão retorna sempre zero - multiplique por 6 pq o método retorna um numero de 0 a menor que 1, nunca retorna 1, então jamais daria 10. flw
GOSTEI 1

Mais Respostas

Olisses

Olisses

09/04/2009

5+5*(int)Math.random();
GOSTEI 0
Terra Jr.

Terra Jr.

09/04/2009

Amigos, aproveitando o espaço, estou com um problema. Fiz uma classe que cálcula randomicamente e exibe 20 numeros de 100. Como se fosse um software para criar jogos de loteria... De 0 a 100 ele tira 20 numeros. Consegui fazer, ok. Usei a método Math.random(), mas ele repete os números e eu não quero que ele gera números repetidos, e, eu não dei:00ps: conta de terminar, é tão simples. :cry: (Sou novato) :!: Alguém pode fazer esse algoritmo pra mim.?
GOSTEI 0
Terra Jr.

Terra Jr.

09/04/2009

Galera, como eu disse vou gerar randomicamente 20 numeros de 100. Então quero alimentar uma array de 20. Como eu faço o laço para alimentar? Gerar os 20 numeros e não repetir nenhum?!!!
      
		int valor;
		int vetor[] = new int[20];


		for (int i = 0; i <=20 ; i++){
			valor = 1 + (int) (Math.random()*100); 
			for (int i1=0;i1<=i;i1++ )
				if (vetor[i1] != valor){
					vetor[i] = valor; //Acrescenta o valor a array
				}			
			
		}
Amigos, ai está somente o código onde vai gerar os 20 numeros na array. Alguém pode terminar para mim, assim eu vejo qual a melhor maneira e aprendo. Desculpe-me mas sou novato.!! Obrigado pela atenção amigos. :evil:
GOSTEI 0
Paulo W.

Paulo W.

09/04/2009

Sou novo no forum e estava procurando um gerador de numero aleatorio e vi seu codigo e acho que colocando um flag resolve o seu problema blz... valeu...
      int valor;
      int vetor[] = new int[20];
      boolean Salvar = false;

      for (int i = 0; i < 20 ; i++){
        valor = 1 + (int) (Math.random()*100); 
        Salvar = true ;
        for (int y=0;y<=i;y++ ){
            if (vetor[y] == valor){
               Salvar = false;
               i--;
            }
        } 
        if (Salvar){                          
           vetor[i] = valor; //Acrescenta o valor a array
        }                                             
      } 
GOSTEI 0
Rodrigo Tormente

Rodrigo Tormente

09/04/2009

[quote="lap_junior"][quote="olisses"]5+5*(int)Math.random();
Uma pequena correção: 5+(int)( 6*Math.random() ) - O cast deve ser feito depois da multiplicação, senão retorna sempre zero - multiplique por 6 pq o método retorna um numero de 0 a menor que 1, nunca retorna 1, então jamais daria 10. flw
To fazendo um trabalho na facu e começei a aprender java nesse semestre, então não entendi muito essa lógica de miltiplicar por 6, e se o 5 no codigo poderia substituir por uma variavel que seria referente ao menor numero dado prase ser este "limite"
GOSTEI 0
Rodrigo Tormente

Rodrigo Tormente

09/04/2009

[quote="terra.jr"]Galera, como eu disse vou gerar randomicamente 20 numeros de 100. Então quero alimentar uma array de 20. Como eu faço o laço para alimentar? Gerar os 20 numeros e não repetir nenhum?!!!
      
		int valor;
		int vetor[] = new int[20];


		for (int i = 0; i <=20 ; i++){
			valor = 1 + (int) (Math.random()*100); 
			for (int i1=0;i1<=i;i1++ )
				if (vetor[i1] != valor){
					vetor[i] = valor; //Acrescenta o valor a array
				}			
			
		}
Amigos, ai está somente o código onde vai gerar os 20 numeros na array. Alguém pode terminar para mim, assim eu vejo qual a melhor maneira e aprendo. Desculpe-me mas sou novato.!! Obrigado pela atenção amigos. :evil:
Amigo, [url="http://javafree.uol.com.br/customSearch.jbb?cx=partner-pub-9439984557405450%3Af7zor0-i5vx&cof=FORID%3A10&ie=ISO-8859-1&q=aleat%F3rio&sa=Pesquisar&siteurl=javafree.uol.com.br%252Fviewtopic.jbb%253Ft%253D868276%2526page%253D1%2526h%253Drandom%2523152677"]na busca do fórum você encontraria facilmente a sua questão[/url]. O simu te alertou sobre isso na sua primeira mensagem. Segue uma solução, com Set:
		Set<Integer> valores = new HashSet<Integer>();
		while (valores.size() < 20) {
			valores.add(1 + (int) (Math.random() * 100));		
		}
Se precisar de uma lista ordenada, use a classe TreeSet no lugar da HashSet. O poder da [url="http://java.sun.com/j2se/1.5.0/docs/api/"]API do Java[/url] a seu favor.
GOSTEI 0
Rodrigo Tormente

Rodrigo Tormente

09/04/2009

[color=blue]Pessoal, notem que estão revivendo um tópico que já tem quase um ano sem atividades... "10/04/2009 05:18:44" não é a data real, o tópico é mais velho.. Devido a uma falha, todos os tópico anteriores receberam essa data.[/color] Mas mesmo assim: [quote="digaort"][quote="lap_junior"][quote="olisses"]5+5*(int)Math.random();
Uma pequena correção: 5+(int)( 6*Math.random() ) - O cast deve ser feito depois da multiplicação, senão retorna sempre zero - multiplique por 6 pq o método retorna um numero de 0 a menor que 1, nunca retorna 1, então jamais daria 10. flw
To fazendo um trabalho na facu e começei a aprender java nesse semestre, então não entendi muito essa lógica de miltiplicar por 6, e se o 5 no codigo poderia substituir por uma variavel que seria referente ao menor numero dado prase ser este "limite" É para receber um número inteiro [b]i[/b] entre 5 e 10 (inclusive):
5 <= i <= 10
o "random()" gera um número real entre 0.0 (inclusive) e 1.0 (exclusive), ou seja, um número [b]x[/b] tal que
0.0 <= x < 1.0
então [b]x[/b] nunca será 1.0, no máximo algo como 0.99999999... pensando em números reais, queremos obter um número [b]y[/b] tal que:
5.0 <= y < 11.0
ou seja, o menor número deve ser 5.0, o maior 10.999... Porque 10.999... e não simplesmente 10.0: se usarmos 10.0 como valor máximo, a probabilidade de receber o número 10.0 é praticamente zero. O resto é matemática:
0.0 <= x < 1.0    (x é o resultado ro "random()")
5.0 <= y < 11.0   (y é o real que queremos obter)
y = a + b*x       (a formula para calcular o y)


x0 = 0.0; y0 = 5.0
x1 = 1.0; y1 = 11.0

5.0 = a + b*0.0
11.0 = a + b*1.0

a = 5.0
b = 6.0

y = 5.0 + 6.0*x
O número procurado [b]i[/b] é a parte inteira do [b]y[/b]. [i]Prova[/i]: valor mínimo do "random()"
x = 0.0
y = 5.0 + 6.0*0.0 = 5.0
i = 5
valor máximo do "random()"
x = 0.9999...
y = 5.0 + 6.0*0.9999... =  5.0 + 5.9999... = 10.9999...
i = 10
Uma linha de raciocínio menos matemática: Voce quer obter os números 5, 6, 7, 8, 9 ou 10 São [b]6[/b] números (em sequência) e como o "random()" varia entre 0.0 e 1.0 (exclusive), ou seja apenas 1 número, o resultado do random tem que ser multiplicado por [b]6[/b]. Como o primerio número obtido dessa forma é 0, mas queremos o 5, temos que adicionar 5. []]
GOSTEI 0
Guilherme Maschio

Guilherme Maschio

09/04/2009

[quote="terra.jr"]Galera, como eu disse vou gerar randomicamente 20 numeros de 100. Então quero alimentar uma array de 20. Como eu faço o laço para alimentar? Gerar os 20 numeros e não repetir nenhum?!!!
      
		int valor;
		int vetor[] = new int[20];


		for (int i = 0; i <=20 ; i++){
			valor = 1 + (int) (Math.random()*100); 
			for (int i1=0;i1<=i;i1++ )
				if (vetor[i1] != valor){
					vetor[i] = valor; //Acrescenta o valor a array
				}			
			
		}
Amigos, ai está somente o código onde vai gerar os 20 numeros na array. Alguém pode terminar para mim, assim eu vejo qual a melhor maneira e aprendo. Desculpe-me mas sou novato.!! Obrigado pela atenção amigos. :evil:
:zoio: :zoio: :zoio:
GOSTEI 0
POSTAR