Comunidad de diseño web y desarrollo en internet online

Aleatorio sin repetir

Citar            
MensajeEscrito el 28 Ene 2008 04:30 pm
Tengo que sacar 10 numeros entre 1 y 50.
Lo consigo hacer.
El problema es que por mas que comparo siempre me acaba sacando alguno repetido.
El numero que me sale lo meto en un array, y lo comparo con el nuevo, pero hace nada mas que lo que le apetece.
Si alguien me puede ayudar se lo agradecere mucho.

:evil:

Por devilish

12 de clabLevel



 

firefox
Citar            
MensajeEscrito el 28 Ene 2008 04:36 pm
Puedes publicar el código que usas para la función del Array? puede que no sea muy grave el problema... jeje

Por vcomics

217 de clabLevel



 

Medellin - Colombia

firefox
Citar            
MensajeEscrito el 28 Ene 2008 04:50 pm
Hecho rápidamente:

Código ActionScript :

var guarda:Array=new Array();
_global.i=1;
while(_global.i<=10){
   numero=random(50)+1;
   compruebanumero(numero);
   }
   
function compruebanumero(numero){
   noesta=false;
   for(j=0;j<=guarda.length;j++){
      if(guarda[j]==numero){
         noesta=true;
         }
      
   }
if(noesta==false){
   guarda.push(numero);
   _global.i++;
   }
}
trace(guarda);

Por One

Claber

1488 de clabLevel

5 tutoriales

Genero:Masculino  

Programador Web

firefox
Citar            
MensajeEscrito el 28 Ene 2008 05:08 pm
bueno.. tu código me funciona perfectamente... :wink:
Hice varias pruebas y siempre me imprime los numeros sin repetir, ahora, si la función para cargar la cargas iniciando de nuevo el SWF hace el proceso bien, pero si lo haces sin iniciarlo de nuevo, osea reproduciendo y volviendo al frame y/o la función, lo que hace es volver a contar entonces se inicia de nuevo sin importar que numeros había cargado antes...
:shock:
Pienso que debes almacanar todos los numeros que produzca el random y adjuntarlos al array que usas para volver a contar!

Saludos!
:wink:

Por vcomics

217 de clabLevel



 

Medellin - Colombia

firefox
Citar            
MensajeEscrito el 28 Ene 2008 07:29 pm
Lo que yo haria es crear un arreglo que me almacene los numeros que
ya se hayan impreso ó hayan salido y despues, recorrer el arreglo
en busca de los numeros y si en el arreglo no se encuentra el ultimo numero generado
entonces se acepta de lo contrario volver a llamar la funcion ranom

Por Keith_NT

451 de clabLevel

3 tutoriales

 

México, Estado de México

msie7
Citar            
MensajeEscrito el 28 Ene 2008 09:34 pm

Código :

function mezclar(m,n) {
   bar=[];
    for (var i = 1; i<=m; i++) bar[i-1]=i;
   for (var i = m-1; i>1; i--){
       alea = Math.floor(i*Math.random());
       temp = bar[i];
          bar[i] = bar[alea];
          bar[alea] = temp;
   }
   return (bar.splice(0,n));
}
//Ejemplo:
miArray = mezclar(50,10);
trace(miArray); // 32,20,38,48,37,27,8,35,28,24 (10 nºs entre 1 y 50)

Por Teseo

SWAT Team

1780 de clabLevel

14 tutoriales

Genero:Masculino   SWAT

firefox
Citar            
MensajeEscrito el 30 Ene 2008 08:35 pm
Yo lo planteo así

Código :

var aux:Number=0;
var listos=new Array(50);
var count:Number=0;


function valida(nums:Array,num:Number){
         var salida:Number=0;
         for(s=0;s<50;s++){
                if(nums[s]==num){
        salida=1;
                 }
          }
          return salida;
}


while(count<50){   
          aux=random(50);  
          res=valida(listos,aux);
          while(res!=0){
                    aux=random(50);   
                    res=valida(listos,aux);
           }
           listos[count]=aux;
           count++;
////////////numero aleatrio impreso/////////
           trace(aux);
}

Por Keith_NT

451 de clabLevel

3 tutoriales

 

México, Estado de México

msie7
Citar            
MensajeEscrito el 23 Dic 2009 06:21 pm
Llego aquí después de una pregunta anterior. La mejor solución que yo he encontrado es DESORDENAR el array y recorrerlo tranquilamente.
Por ejemplo

Código ActionScript :

var numeros:Array=new Array()
//lo lleno
for (int i=0;i<10;i++){
       numeros.push(i)
}
trace(numeros) //saldrá 0,1,2,3,4,5,6,7,8,9
//lo desordeno
for (int j=0;j<10;j++){
    var tmp:int=numeros[j]
    var k:int=Math.floor(Math.random()*numeros.length))
    numeros[j]=numeros[k]
    numeros[k]=tmp
}
trace(numeros) //saldrá lo que sea, por ejemplo 3,2,6,7,8,0,1,4,5,6,9
//Ya sólo tengo que recorrer los elementos del array uno a uno
foreach (int numero in numeros){
    trace(numero)
}

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 23 Dic 2009 06:30 pm
Eliseo2, fijate las fechas, este post es del 2008. Además de el código de Teseo es mucho más eficiente.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

msie8

 

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