Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

fekz

Math.random

Recommended Posts

<html>
<script>


intInicio = 1;
intFim = 3;

alert(parseInt(Math.random()*intFim));

</script>

</html>

Bem claramente, preciso que o número pega entre 1 e 3, inclusive.

 

Se eu coloco do jeito que está, ele sortea 0, 1 e 2.

Se eu coloco: alert(parseInt(intInicio +Math.random()*intFim));

Ele sortea 1, 2 e 3.

 

Preciso sortear 0, 1, 2 E 3. O intervalo fechado, inclusive os números da ponta.

Lembrando que é genérico, e não somente com 0, 1, 2 e 3, o usuário que vai digitar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então amigo mas preciso que se inicialize por uma variável também.

Não do 0.

Mas já resolvi esse problema...

Agora eu precisa fazer pra verificar se o numero sorteado já existe...

 

<html>

<script>
numeros = new Array();
intInicio = prompt("digite n1");
intFim = prompt("digite n2")

for(i= 0; i<6; i++){
numeros[i] = intFim - Math.floor((intFim - intInicio+1) * Math.random());
}


for(i=0; i<6; i++){
document.write(numeros[i] + "<br>");
}

</script>

</html>

sabe como?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer assim

		for (var i = 0; i < numeros.length; i++) {
				if (numeros[i]==Variavel){
					document.write("faz o que tem que fazer");
				}
				else{
					document.write("faz o que tem que fazer");
				}
			}

Existe um outro codigo mas não funciona em todos os navegadores que seria esta qui

 

   numeros.indexOf(Variavel));

Mas com o uso do for e mais garantido

Compartilhar este post


Link para o post
Compartilhar em outros sites

for(i=0; i<6; i++){
for(j=i+1; j<5; j++){
if(numeros[i] == numeros[j]){
numeros[j] = intFim - Math.floor((intFim - intInicio+1) * Math.random());
for (i=0; i<6; i++){
if(numeros[j] == numeros[i]){numeros[i] = intFim - Math.floor((intFim - intInicio+1) * 

Math.random();)
alert(numeros[i]);
}
}
}
}
}

Eu fiz isso, o problema é que ainda sai uns numeros iguais, pq o numero pode gerar um numero que seja igual a um depois dele, e ai nao esta comparando direito

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara ta meio confuso de entender o que você quer, mas se eu entendi direito o seu problema e que você tem que a cada novo numero ver todo o array, por que o numero pode repetir em qualquer dimensão dele, este codigo aqui deve resolver, embora se eu fose você faria uma adaptação por que ele corre o risco de cair em loop infinito caso sempre saia numeros repetidos então seria legal fazer um controle dos numeros de tentativas e criar uma formula alternativa pro numero algo do tipo, tenta 10 vezes se repetir soma o primeiro e o ultimo se continuar repetindo vai somando +1 até sair um numero que não tenha, sei la, uma regra que atenda o seu projeto ai

 

for(i=0; i<6; i++){
	var flagOk=false;
	while(!flagOk){
		var ValRadom= intFim - Math.floor((intFim - intInicio+1) * Math.random());
		flagOk=true;
		for (var i = 0; i < numeros.length; i++) {
			if (numeros[i]==ValRadom){
				flagOk=false;
			}
		}
	}
	if (flagOk){
		numeros[i]=ValRadom;
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua repetindo..

 

Acho que você entendeu.

 

Se eu botar 20 e 30

pode sair

 

22

23

23

24

25

22

 

Então eu tenho que tirar esses numeros repetidos até gerar outros que não sejam repetidos, entendeu?

Ai eu pensei em pegar um for e por no começo do array ou seja 22, ai vou percorrendo ele com otro for, e quando chegar no ultimo que é 22, ele troca esse 22 por outro numero, beleza.

 

Acontece que se chegar no ultimo, e ele gerar um numero 24 que é igual a 4 posicao por exemplo, ele nao iria voltar pra verificar. Muito complicado isso ;[

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, então e isso mesmo, tem um erro no meu codigo ai no segundo for, que o i teria que ser uma segunda variavel.


  for(i=0; i<6; i++){
      var flagOk=false;	/*Variavel de controle não gosto delas mas não achei coisa melhor agora*/
      while(!flagOk){ /*Enquanto não for ok ele vai estar no loop*/
          var ValRadom= intFim - Math.floor((intFim - intInicio+1) * Math.random());/*Gero o seu numero randomico
          flagOk=true;/*Como eu sou otimista eu vou assumir que esta ok e o numero não e reptido*/
         for (var j = 0; j < numeros.length; i++) {/*Ai eu vou varrer o array que tem os numeros quardados para ver e ja tenho este numero*/
	if (numeros[j]==ValRadom){
	      flagOk=false; /*Se eu encontrar um numero repetido eu ponho o flag para falso*/
	}		
          }
         /*Se eu chegar aqui e o flaOk aida for verdadeiro e por que não repetiu e saio do while, se for falso eu continuo no laço e gero outro numero
ai seria bom criar um contador de tentativas para evitar um loop infinito caso o numero sempre repita
*/   
      }
    if (flagOk){/*Ai o flagOk e veradeiro então eu posso guardar o numero no array*/
          numeros[i]=ValRadom;
        }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.