elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Como puedo utilizar un numero random en un bucle sin que se repita?(cs)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Como puedo utilizar un numero random en un bucle sin que se repita?(cs)  (Leído 2,472 veces)
Reent

Desconectado Desconectado

Mensajes: 59



Ver Perfil
Como puedo utilizar un numero random en un bucle sin que se repita?(cs)
« en: 25 Julio 2019, 17:08 pm »

Código
  1. for (int i = 0; i < questions.Length; i++)
  2.            {
  3.  
  4.                Random rQuestions = new Random(Guid.NewGuid().GetHashCode());
  5.                int rQ = rQuestions.Next(9);
  6.                Console.WriteLine(questions[rQ]);
  7.                Console.WriteLine(answers[rQ]);
  8.                int iTry = int.Parse(Console.ReadLine());
  9.  
  10.                if (iTry == rAnswers[rQ])
  11.                {
  12.                    points++;
  13.                    Console.WriteLine("Great!!");
  14.                }
  15.                else
  16.                {
  17.                    Console.WriteLine("False!!");
  18.                }
  19.                Console.WriteLine();
  20.            }


Mod: Obligatorio el uso de etiquetas GeSHi. Los temas sobre C# van a su correspondiente subforo.


« Última modificación: 26 Julio 2019, 09:50 am por #!drvy » En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.351


Ver Perfil
Re: Como puedo utilizar un numero random en un bucle sin que se repita?(cs)
« Respuesta #1 en: 26 Julio 2019, 20:20 pm »

Creas un array con suficientes números random (puedes asegurarte que no se repitan, o que no se repitan más de x veces)

En tu bucle luego tomas el nº random que yace en el array cuyo ciclo estás.

Obviamente si el bucle es muy muy grande (pongamos 1 millón), tu array debe ser de dicho tamaño, pero si es enormemente más grande, no resulta práctico, y en algún momento deberían repetirse...


Ahora, si lo que necesitas es que aparezca 1 sola vez todos los números de una lista, es más práctico hacer lo siguiente:
1 - Creas un array de dicho tamaño, en el primer bucle incluyes dichos valores, pongamos que quieres que que aparezcan una sola vez los valores del 35 al 53

Código:
declarar Array(0 a 53-35)

bucle para k desde 0 hasta 53-35
    array(k) = (k + 35)
siguiente

2 - ...pero están ordenados, como los quieres aleatorios hay que desordenarlos:
Código:
bucle para k desde 53-35 hasta 1 regresiva
    az = Random(entre 0 y k)
        
    tmp = Array(az)
    Array(az) = Array(k)
    Array(k) = tmp
siguiente

3 - Ahora ya podrás obtener los valores random, usarlos en tu bucle, y sin reptición... los tomas en orden del array porque en el array ya están colocados al azar y sin repetición (en el ejemplo valores solo del 35 al 53).

Código:
bucle para k desde 0 hasta 53-35
   valor = array(k)
   ...
siguiente


« Última modificación: 26 Julio 2019, 20:24 pm por NEBIRE » En línea

WHK
Moderador Global
***
Desconectado Desconectado

Mensajes: 6.589


Sin conocimiento no hay espíritu


Ver Perfil WWW
Re: Como puedo utilizar un numero random en un bucle sin que se repita?(cs)
« Respuesta #2 en: 27 Julio 2019, 05:19 am »

Todo va a depender la cantidad de valores que necesites, por ejemplo, si esto es una tarea eso quiere decir que debes unir las matemáticas. Por ejemplo, usas una variable para guardar el último valor creado, por defecto es cero, el nuevo valor es igual a ese valor guardado mas un numero random, luego el resultado lo guardas en la variable para generar el nuevo valor, esto asegurará que cada valor sea único.

Si necesitas algo práctico, necesitarás guardar todos los resultados y omitirlos de los resultados, pero es mas complicado, necesitarás forzadamente una base de datos ya sea en memoria, fs o sql.

Si necesitas hacer una app que genere identificadores únicos entonces debes utilizar un estandar que ya fue diseñado para ello y es el UUID, .Net lo soporta nativamente:

https://docs.microsoft.com/en-us/dotnet/api/system.guid.newguid?redirectedfrom=MSDN&view=netframework-4.8#System_Guid_NewGuid

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines