Foros del Web » Programación para mayores de 30 ;) » .NET »

Números aleatorios NO repetidos

Estas en el tema de Números aleatorios NO repetidos en el foro de .NET en Foros del Web. Hola foreros. Necesito una función eficiente que pueda seleccionar entre 1 y 50 (por ejemplo) sin que se repita. Si por ejemplo pongo esto... no ...
  #1 (permalink)  
Antiguo 21/09/2004, 06:40
Avatar de Phoncadiz  
Fecha de Ingreso: mayo-2004
Ubicación: Cádiz City
Mensajes: 232
Antigüedad: 20 años
Puntos: 1
Números aleatorios NO repetidos

Hola foreros.

Necesito una función eficiente que pueda seleccionar entre 1 y 50 (por ejemplo) sin que se repita.
Si por ejemplo pongo esto... no es nada eficiente porque tengo que esperar a que coincida el número que falta en el bucle:

Código:
int i=1;
ArrayList Lista = new ArrayList();
string[] archivos ;
int MaxNum = 50;

Random numeroAleatorio = new Random();
while (i<=MaxNum)
{
   int numero = numeroAleatorio.Next(1,MaxNum);
   if (Lista.Contains(numeroAleatorio)== false)
   {
      Response.Write(i.ToString() + "-> " + numeroAleatorio.Next(1,MaxFotos).ToString() + "<br>");
      Lista.Add(numeroAleatorio);
      i++;
   }
}
¿Tiene RANDOM alguna opción que lo solucione?
Saludos!!!
__________________
Tantas horas delante de una pantalla servirá para algo....
[Phoncadiz; mínimo 8 h. al día con el PC] :stress:
  #2 (permalink)  
Antiguo 22/09/2004, 02:19
Avatar de Phoncadiz  
Fecha de Ingreso: mayo-2004
Ubicación: Cádiz City
Mensajes: 232
Antigüedad: 20 años
Puntos: 1
Me auto-respondo:

-He utilizado dos ArrayList. En en primero tengo los números ordenados de 0 a N y en el segundo voy introduciendo los números que saco del primer ArrayList de forma aleatoria y a la vez voy borrando:

Código:
int MaxFotos = 50;			
ArrayList Lista = new ArrayList();
ArrayList aAux = new ArrayList(MaxFotos);

for (int iNum=0; iNum < MaxFotos; iNum++)
	aAux.Add(iNum);

Random rAleatorio = new Random();
int iAux;
for (int iNum=MaxFotos-1; iNum >= 0; iNum--)
{
	iAux = rAleatorio.Next(0,iNum+1);
	Lista.Add(aAux[iAux]);
	aAux.RemoveAt(iAux);
}

for (int iNum=0; iNum<MaxFotos; iNum++)
	Response.Write(iNum.ToString() + "-> " + Lista[iNum].ToString() + "<br>");
A mi parecer es una función eficiente, pero mi duda es... ¿Puedo rellenar un ArrayList de 0 a 50 (por ejemplo) sin tener que hacer un bucle "for"? Osea... rellenarlo en la declaración.

Saludos!!!
__________________
Tantas horas delante de una pantalla servirá para algo....
[Phoncadiz; mínimo 8 h. al día con el PC] :stress:

Última edición por Phoncadiz; 22/09/2004 a las 03:05
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




La zona horaria es GMT -6. Ahora son las 07:41.