Autor Tema: Duda Como generar numeros aleatorios en c# random y rnd  (Leído 17824 veces)

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Duda Como generar numeros aleatorios en c# random y rnd
« en: 27 de Octubre 2014, 16:10 »
Bueno resulta que es super extraño, quiero decir que no esta terminado 100% el código pero debe de mostrar unos ciertos valores correctamente.

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ejercicioMetodos
{
    class Program
    {
        static void Main(string[] args)
        {
 
            numeroIngresar();
            Console.ReadKey();
           
             
        }
 
        static void numeroIngresar()
        {
            int cont = 0;
            int e = 0;
            Console.WriteLine("Cuantos numeros quieres ingresar: ");
            int numerosIngresar = int.Parse(Console.ReadLine());
            int[] numeroArray = new int[numerosIngresar];
            for (int i = 0; i < numerosIngresar; i++)
            {
 
                Random rnd1 = new Random();
                numeroArray[i] =rnd1.Next(5000) ;
 
            }
                while (e < numerosIngresar)
                {
                   if(e+1 >= numerosIngresar)
                   {
                       break;
                   }
                   if(numeroArray[e]<numeroArray[e+1])
                   {
                       int auxiliar = numeroArray[e];
                       numeroArray[e] = numeroArray[e + 1];
                       numeroArray[e + 1] = auxiliar;
                   }
                   cont++;
                    if(cont == numerosIngresar)
                    {
                        break;
                    }
                    e++;
                }
            for(int j= 0 ; j < numerosIngresar;j++)
            {
            Console.WriteLine(numeroArray[j]);
            }
        }
         
    }
}

Explico lo que pasa, resulta que en estas líneas inicializo una NUEVA instancia del objeto Random:


Código: [Seleccionar]
for (int i = 0; i < numerosIngresar; i++)
            {
 
                Random rnd1 = new Random();
                numeroArray[i] =rnd1.Next(5000) ;
 
            }


Aparentemente no existe un fallo de sintaxis... pero claro cuando inicio la consola y le digo que genere 3 numeros ALEATORIOS pues sale 3 numeros igualitos..

Entonces estaba analizando el código y todo esta correctamente, entonces cogí y ejecute el DEPURADOR, y bueno la sorpresa es que cuando lo hago con el depurador, resulta que SI SALEN NUMEROS ALEATORIOS...

Entonces busco la ayuda de una mente experta en programación y que me diga por que pasa eso, me estoy volviendo loco  :bye:
« Última modificación: 28 de Octubre 2014, 08:24 por Ogramar »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Duda Como generar numeros aleatorios en c#
« Respuesta #1 en: 27 de Octubre 2014, 17:19 »
Hola, la "aletoriedad" cuando se generan números en un computador no es tan simple como parece porque la ejecución de las máquinas es determinista, es decir, en teoría siempre te debe llevar a un mismo resultado.

El problema puede estar relacionado con que estás creando una instancia de Random en cada repetición del bucle for, con lo cual no permites que una semilla genere aleatoriedad, sino que en cada pasada vuelves a crear la semilla y por eso te vuelve a repetir los números. Prueba a sacar esa parte del código del bucle, o sea:

Código: [Seleccionar]
Random rnd1 = new Random();

for (int i = 0; i < numerosIngresar; i++)
            {
 
               
                numeroArray[i] =rnd1.Next(5000) ;
 
            }

A ver si te funciona!!

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Re:Duda Como generar numeros aleatorios en c# random y rnd
« Respuesta #2 en: 28 de Octubre 2014, 11:05 »
Ya terminé mi código, tengo 2 cosas que preguntar

1. ¿notáis que estoy mejorando?
2.  la otra duda que tengo, es que si puedo hacer esto mas CORTO,  es decir  podría usar 2 metodos y no 1? o por ejemplo algun tipo de consejo para hacerlo mas corto(si es que existe)

Código: [Seleccionar]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ejercicioMetodos
{
    class Program
    {
        static void Main(string[] args)
        {
 
            numeroIngresar();
            Console.ReadKey();
 
 
        }
 
        static void numeroIngresar()
        {
            int cont = 0;
            int e = 0;
 
            Console.WriteLine("Cuantos numeros quieres ingresar: ");
            int numerosIngresar = int.Parse(Console.ReadLine());
            int[] numeroArray = new int[numerosIngresar];
            Random rnd1 = new Random();
            int ordenar = numerosIngresar;
            for (int i = 0; i < numerosIngresar; i++)
            {
                numeroArray[i] = rnd1.Next(5000);
 
            }
            for (int i = 0; i < numerosIngresar; i++)
            {
                if (i == numerosIngresar - 1)
                {
                    int contabilizar = i;
                    int x = 0;
                    double max = 9999999999999999999;
 
                    for (int j = contabilizar; j > 0; j--)
                    {
 
 
 
                        while (true )
                        {
                            if (j == 0)
                            {
                                j = i;
 
                            }
                            if (numeroArray[j] > numeroArray[j - 1])
                            {
                                int auxiliar = numeroArray[j];
                                numeroArray[j] = numeroArray[j - 1];
                                numeroArray[j - 1] = auxiliar;
                            }
 
 
                             x = x + 1;
                           
                            if (x == 1000090)
                            {
                                break;
                            }
 
                            j--;
 
                        }
 
 
 
 
                        break;
 
 
 
                    }
 
 
                }
 
 
            }
 
            for (int j = 0; j < numerosIngresar; j++)
            {
                Console.WriteLine(numeroArray[j]);
            }
        }
 
 
 
    }
}

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Duda Como generar numeros aleatorios en c# random y rnd
« Respuesta #3 en: 28 de Octubre 2014, 11:43 »
Hola, sí se nota que estás mejorando, pero de lo que no estoy seguro es de si estás aprendiendo con buenos materiales. ¿Estás siguiendo un libro o una página web, o es una asignatura...?

El código no se ve excesivamente largo, no tienes que obsesionarte por hacerlo todo muy corto (aunque tampoco debes hacerlo más largo de lo necesario).

Has escrito while (true), esto en general no es una sentencia adecuada excepto en casos muy concretos. Puedes leer sobre esto en https://www.aprenderaprogramar.com/foros/index.php?topic=1022.msg5803#msg5803

Saludos!!

Sixtoex

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 105
    • Ver Perfil
Re:Duda Como generar numeros aleatorios en c# random y rnd
« Respuesta #4 en: 28 de Octubre 2014, 12:16 »
Hola, sí se nota que estás mejorando, pero de lo que no estoy seguro es de si estás aprendiendo con buenos materiales. ¿Estás siguiendo un libro o una página web, o es una asignatura...?

El código no se ve excesivamente largo, no tienes que obsesionarte por hacerlo todo muy corto (aunque tampoco debes hacerlo más largo de lo necesario).

Has escrito while (true), esto en general no es una sentencia adecuada excepto en casos muy concretos. Puedes leer sobre esto en https://www.aprenderaprogramar.com/foros/index.php?topic=1022.msg5803#msg5803

Saludos!!

Estoy siguiendo este curso:
https://www.video2brain.com/es/cursos/c

y luego cuando pase ese curso, seguire con los videos de Jesus Conde, no se si lo conoces, es de youtube

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Duda Como generar numeros aleatorios en c# random y rnd
« Respuesta #5 en: 28 de Octubre 2014, 12:27 »
Sí, si los conozco... Nosotros colaboramos con esta web por lo que los cursos que recomendamos son lo de esta web: http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=57&Itemid=86, si colaborara con otra web recomendaría otros  ;D

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".