Comunidad de diseño web y desarrollo en internet online

ayuda con Random

Citar            
MensajeEscrito el 08 Jul 2007 03:35 am
hola bueno he leido lo que he encontrado sobre el random pero no he logrado hacer lo siguiente.

tengo un array con 10 posiciones, este contiene 10 numeros distindos, lo que necesito hacer es que envie aleatoriamente un numero de 0 a 9 (o 1 a 10) , con este numero tomo la posicion del array ejemplo , si me sale el 7, variable = array[7], pero lo complicado es que tnego q ahcerlo 9 veces mas y no que se repita este 7.

espero se encienda :|
el random que estyo usando es uno q sale en la ayuda de flash :

Código :

Math.floor(Math.random() * (9 - 0 + 1)) + 0


espero que me puedan ayudar

Por korex

32 de clabLevel



 

msie7
Citar            
MensajeEscrito el 08 Jul 2007 10:09 am
Con este codigo tendrias los numeros aleatorios de 0 - 9: Math.floor(Math.random()*10);

aca te arme un codigo para tener los nums aleatorios sin que se repitan, es un poco largo (en lineas y en procesos) pero funciona (hasta te lo documente no puedes quejarte).. el codigo lo hice en as3 y ahi funciona joya... necesita ser optimizado para que no loopee tanto pero bue, eso te lo dijo a ti...

// array que va a guardar los nums que ya salieron
var numsSalieron:Array = new Array();
// array que va a ir guardando los numeros que no se repiten
var indiceCorrectos:Array = new Array();
// variable para guardar el numero aleatorio
var indice:Number;
// variable que me indica si el numero salio o no
var salio:Boolean;

// hacemos un loop que se va a ejecutar hasta que tengamos diez indices correctos
for (var i:Number=0; indiceCorrectos.length<10; i++) {
// asiganamos a indice nuestro numero aleatorio del 0-9
indice = Math.floor(Math.random()*10);
// comprobamos que ese numero no exista en el array de numeros que ya salieron
for (var j:Number=0; j<i; j++) {
// si indice esta en alguna posicion de numsSalieron sale del bucle y ya nos indica que esta repetido
if (indice == numsSalieron[j]) {
salio = true;
break;
} else {
// si paso por todos los indices de nums Salieron sin ser igual entonces no esta
salio = false;
}
}
// sino fue igual a ninguno que haya salido lo agregamos
if (salio == false) {
indiceCorrectos.push(indice);
}
// finalmente agregamos el num que salio al array de nums que ya salieron
numsSalieron[i] = indice;
}

trace(indiceCorrectos);

Por N

36 de clabLevel



Genero:Masculino  

Buenos Aires, Argentina

firefox
Citar            
MensajeEscrito el 08 Jul 2007 03:23 pm
Muchas gracias te pasaste

Por korex

32 de clabLevel



 

msie7
Citar            
MensajeEscrito el 08 Jul 2007 03:39 pm
N, usá las etiquetas de código.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 09 Jul 2007 12:39 am
:o Ja Muy bueno, me fue util a mi =, Como no se me ocurrio ESO!
Recorrer el Array con los numeros ya aparecidos, y si ya estan lo vuelve a recorer, y si no lo devuelve y ademas lo agrega al array! :D
Con esto se me dan varias ideas más!!! :cry: :wink:

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

msie7
Citar            
MensajeEscrito el 09 Jul 2007 01:22 am
El problema que le veo a la solución que planteas es rendimiento, si en lugar de 10 números fueran 1000 el tiempo de proceso se te va a disparar (algo que ya comentas). Una solución más genérica podría ser algo así:

Código :

var cantidadNum:Number = 10;
var numOriginales:Array = new Array();
var numAleatorios:Array = new Array();
var tmpNum:Number;

for(var i:Number=cantidadNum;i>0;i--){
   numOriginales.push(i);
}

for(var i:Number=0;i<cantidadNum;i++){
   tmpNum = Math.floor(Math.random()*numOriginales.length);
   numAleatorios.push(numOriginales[tmpNum]);
   numOriginales.splice(tmpNum,1);   
}

trace(numAleatorios);

Hecho a lo rápido, con esta solución obtendrías lo mismo pero con menos consumo de cpu.

Un Saludo.

Por alejandrogq

0 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Jul 2007 03:11 am
Menos consumo porque no almacenás todos los números... Igual, en caso de no necesitarlos todos es un buen método.

PD: Para lo que tratás de hacer, es más fácil usar un número negativo en el splice.

Por HernanRivas

Claber

3416 de clabLevel

26 tutoriales

 

Argentina

firefox
Citar            
MensajeEscrito el 10 Jul 2007 02:12 am
No entendi la uultimaa manera :shock:
:wink: ¿Me la esplicarian?

Por JaLeRu

Claber

1913 de clabLevel

7 tutoriales

Genero:Masculino  

Existo

firefox
Citar            
MensajeEscrito el 13 Jul 2007 07:03 pm
entendido muchas gracias

Por korex

32 de clabLevel



 

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.