Foros del Web » Creando para Internet » Flash y Actionscript »

Números aleatorios sin repetirse

Estas en el tema de Números aleatorios sin repetirse en el foro de Flash y Actionscript en Foros del Web. Buenas, estoy haciendo un programa para sacar 10 números aleatorios del 0 al 20 sin que se repitan. Código: var combinacion:Array = new Array(); var ...
  #1 (permalink)  
Antiguo 21/12/2009, 10:20
 
Fecha de Ingreso: diciembre-2009
Mensajes: 4
Antigüedad: 15 años
Puntos: 0
Números aleatorios sin repetirse

Buenas, estoy haciendo un programa para sacar 10 números aleatorios del 0 al 20 sin que se repitan.

Código:
var combinacion:Array = new Array();
var provisional:uint=0;
for(var i:Number=0; i<10; i++){
	provisional=Math.random()*20+1;
	combinacion[i] = provisional;
		for (var j:Number=0; j<combinacion.length; j++){
			if (provisional==combinacion[j-1]){
					trace("Provisional "+provisional);			
					trace("Combinacion j "+combinacion[j]);
					trace("Repetido");
			}
			else{
				combinacion[i] = provisional;
				combinacion_txt.text = String(combinacion);
			}
		}
De este modo logro que no salga un número repetido, pero solamente comparada con el número que ha salido inmediatamente antes, ¿cómo hago para compararlo con todos los valores del array?

Gracias
  #2 (permalink)  
Antiguo 21/12/2009, 10:35
 
Fecha de Ingreso: octubre-2008
Mensajes: 137
Antigüedad: 16 años, 2 meses
Puntos: 4
Respuesta: Números aleatorios sin repetirse

Se me ocurre que puede quedar así:

Código:
var combinacion:Array = new Array();
var provisional:uint=0;
for(var i:Number=0; i<10; i++){
	combinacion[i]=0;
                provisional=Math.random()*20+1;
	 for(;combinacion[i] != 0;){
                 if(provisional==combinacion[0] || provisional==combinacion[1] || provisional==combinacion[2] || provisional==combinacion[3] || provisional==combinacion[4] || provisional==combinacion[5] || provisional==combinacion[6] || provisional==combinacion[7] || provisional==combinacion[8] ){
                combinacion[i] = provisional;
		}
	}
Espero que solucione tu problema
  #3 (permalink)  
Antiguo 21/12/2009, 11:29
 
Fecha de Ingreso: diciembre-2009
Mensajes: 4
Antigüedad: 15 años
Puntos: 0
Respuesta: Números aleatorios sin repetirse

La idea que tenía es que una vez generado el valor de la variable provisional, se comparara con el resto de valores del array combinación, y si es diferente se añade al array y si no pues nada.

¿Cómo debo hacer esto?
  #4 (permalink)  
Antiguo 21/12/2009, 11:59
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 17 años, 1 mes
Puntos: 51
Respuesta: Números aleatorios sin repetirse

no se si te esto es lo que estas buscando pero bueno XD

el código es para AS3

Código PHP:
package com.cfx.utils{
    
import flash.display.MovieClip;
    
import flash.events.Event;
    
import flash.display.Bitmap;
    
import flash.display.BitmapData;
    public class 
RandomUnic  {
        public var 
tempValues:Array=new Array()
        public function 
RandomUnic():void {
        }
        public function 
addValue(valor:*):void {
            
tempValues.push(valor)
        }
        public function 
getRamdon():* {
            var 
canttempValues.length
            
var random=Math.floor(Math.random()*cant)
            return 
tempValues.splice(random,1)
        }
    }

te explico este código lo que hace es que se devuelvan unicamente un valor de una lista una ves devuelto todos los valores de dicha lista no devolverá nada

un ejemplo
Código PHP:
import com.cfx.utils.RandomUnic

var ram:RandomUnic=new RandomUnic()
for (var 
i:int=0;i<10;i++){
ram.addValue(i)
}
for (var 
j:int=0;j<15;j++){
trace(ram.getRamdon()) //Salida 

/*
5
9
3
4
6
0
7
2
1
8
*/


el ejemplo de arriba crea en principio la clase RandomUnic

lo siguiente es dar los valores a la lista en este caso le damos valores del 0 al 9

para poder verlos utilizamos getRamdon() esto nos muestra el valor ramdon único

en as2 el código con el mismo ejemplo seria asi


Código PHP:
//FUNCIONES Random
var tempValues:Array = new Array();
function 
addValue(valor) {
    
tempValues.push(valor);
}
function 
getRamdon() {
    var 
cant tempValues.length;
    var 
random Math.floor(Math.random()*cant);
    return 
tempValues.splice(random1);
}
////

//EJEMPLO
for (var 0i<10i++) {
    
addValue(i);
}
for (var 
0j<10j++) {
    
trace(getRamdon());

__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 02:34.