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

random en c# dentro de funcion no se genera nuevo al llamarla

Estas en el tema de random en c# dentro de funcion no se genera nuevo al llamarla en el foro de Programación General en Foros del Web. Amigos tengo un problema, en c# hice esta funcion, pero cuando la llamo dentro de otro lado ( en un ciclo) el random que me ...
  #1 (permalink)  
Antiguo 08/10/2013, 13:26
Avatar de jolie_girl  
Fecha de Ingreso: agosto-2008
Ubicación: mexico
Mensajes: 346
Antigüedad: 15 años, 7 meses
Puntos: 10
Exclamación random en c# dentro de funcion no se genera nuevo al llamarla

Amigos tengo un problema, en c# hice esta funcion, pero cuando la llamo
dentro de otro lado ( en un ciclo) el random que me genera el numero aleatorio
es el mismo!!!, ¿Por que??.............. Alguien que me explique?
como hacer que cambie en cada llamada a la funcion cruceenpunto?


public int[] cruceenpunto(int[] individuo1, int[]individuo2)
{

int largo = individuo1.Length;
int[] individuonuevo = individuo1;
Random r = new Random();
int j;
int k;

// Generamos un número entre dos valores dados
int aleatorio = r.Next(0, largo);

for (j = 0; j < aleatorio; j++)
{
codigo
}


return individuonuevo;

}
__________________
Solicito colaboradoras para proyecto social media largo plazo. Manda mp
  #2 (permalink)  
Antiguo 09/10/2013, 00:57
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: random en c# dentro de funcion no se genera nuevo al llamarla

El problema es que los valores que genera Random no son auténticamente aleatorios, sino que son pseudoaleatorios. Para que cada vez que llames a la función genere un valor diferente, la variable "r" ha de ser global a todo el programa y la inicializas en el main, de forma que en la función unicamente te quede la llamada a Next.

Tendría que quedar estructurado algo así:

Código C:
Ver original
  1. class Program
  2. {
  3.         Random r;
  4.  
  5.         static void Main(string[] args)
  6.         {
  7.                  r = new Random();
  8.  
  9.                 // Aqui el resto del código
  10.         }
  11.  
  12.         public int[] cruceenpunto(int[] individuo1, int[]individuo2)
  13.         {
  14.                 int largo = individuo1.Length;
  15.                 int[] individuonuevo = individuo1;
  16.                 int j;
  17.                 int k;
  18.  
  19.                 // Generamos un número entre dos valores dados
  20.                 int aleatorio = r.Next(0, largo);
  21.  
  22.                 for (j = 0; j < aleatorio; j++)
  23.                 {
  24.                         codigo
  25.                 }
  26.  
  27.                 return individuonuevo;
  28.         }
  29. }
__________________
Aviso: No se resuelven dudas por MP!

Etiquetas: funcion, genera, random
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 04:54.