Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Eleкtro en 18 Enero 2013, 17:18 pm



Título: [SOLUCIONADO] problema con Random
Publicado por: Eleкtro en 18 Enero 2013, 17:18 pm
¿Que debo hacer para que esto funcione?

Si declaro la variable "Rando" fuera de la función, funciona, pero precísamente lo que pretendo es ahorrarme la necesidad de declarar la variable fuera de la función... xD

Código
  1. Public Class Form1
  2.  
  3.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.        Dim a As New List(Of String)
  5.        For x As Integer = 0 To 10 : a.Add(Get_Random_Number(1, 100)) : Next
  6.  
  7.        For Each f In a : MsgBox(f) : Next ' El número siempre es el mismo
  8.  
  9.    End Sub
  10.  
  11.    Public Function Get_Random_Number(ByVal min As Integer, ByVal max As Integer) As Integer
  12.        Dim Rando As New Random
  13.        Return Rando.Next(min, max)
  14.    End Function
  15.  
  16. End Class


Título: Re: problema con Random
Publicado por: $Edu$ en 18 Enero 2013, 17:29 pm
Lo ideal seria que hagas una funcion que te devuelva la lista ya con los numeros aleatorios, es decir, en el load solo pondrias a = ListAleatoria(1, 100).

Asi te puedes guardar el snippet de una funcion que devuelva una lista con numeros aleatorios segun si indiquen en los parametros que se llame.

Vos estas haciendo que solo devuelva un numero y luego lo guardas, mas vale hacer como digo de que devuelva la lista ya.

De todas formas, para tu duda en si, mirate esto:

http://www.elguille.info/NET/dotnet/random_Next.aspx

Entenderas muchas cosas mas a parte de lo que quieres.


Título: Re: problema con Random
Publicado por: kub0x en 18 Enero 2013, 17:32 pm
Para obtener 2 valores aleatorios, en vez de usar Random, utillizo la función Rnd(), espero que lo tengas en cuenta.

Código
  1. Private Sub GetRandomNumbers(Byval Min as int32, Byval Max as int32)
  2. ' Inicializamos el generador de nº aleatorios
  3. Randomize()
  4. ' Generamos un valor aleatorio entre 50 y 100
  5. Dim Valor As Integer = CInt(Int((100 * Max()) + Min))
  6. return Valor
  7. End Sub

Solo te falta añadir esos números a una Lista.

Saludos!


Título: Re: problema con Random
Publicado por: Novlucker en 18 Enero 2013, 17:37 pm
Concuerdo con $Edu$, de este modo estas creando una función que no agrega ningún tipo de funcionalidad, valga la redundancia.
¿Qué me ahorra el utilizar la función nueva? ¿El new solamente? Si estas creando snippets, que realmente tenga un valor agregado, y que no simplemente sea un sinónimo, cuesta más buscar el snippet que escribir el código :xD

Saludos


Título: Re: problema con Random
Publicado por: Eleкtro en 18 Enero 2013, 17:41 pm
Poca funcionalidad más puede tener un "get random numbers", sólamente elegir si se quiere un número décimal o... bueno, ya vendrá, primero necesito que funcione xD



Lo de la lista solo era un ejemplo de uno de los casos en los que siempre manda el mismo número.

Citar
1- NO generar la instancia de clase Random, ni la semilla, dentro de un bucle.
Ya que si lo haces, puedes tener la seguridad de que los valores se repitan.

2- NO generar la semilla ni la instancia del objeto Random dentro de un método que será llamado de forma consecutiva.
Podías pensar, que si en lugar de crear la instancia dentro del bucle, la creas fuera se soluciona, pero si ese "fuera" es dentro del método, la verdad es que no.

Pues vaya :(.



Código
  1.    Private Sub GetRandomNumbers(Byval Min as int32, Byval Max as int32)
  2.    ' Inicializamos el generador de nº aleatorios
  3.    Randomize()
  4.    ' Generamos un valor aleatorio entre 50 y 100
  5.    Dim Valor As Integer = CInt(Int((100 * Max()) + Min))
  6.    return Valor
  7.    End Sub

Se nota que lo has escrito al vuelo, no funciona! xD

He intentado corregirlo pero me devuelve siempre valores por encima de "400"


Título: Re: problema con Random
Publicado por: Danyfirex en 18 Enero 2013, 19:41 pm
Código
  1. CInt(Math.Ceiling(Rnd() * n))

saludos

edito: creo que entendi mal. esto es para un numero entre 1 y n.
 :S

este si.

Código
  1. Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
  2.    Dim Generator As System.Random = New System.Random()
  3.    Return Generator.Next(Min, Max)
  4. End Function
  5.  


edito otra vez. :S

seba123neo se adelanto.

hahaha

saludos


Título: Re: problema con Random
Publicado por: Eleкtro en 18 Enero 2013, 19:50 pm
Grax :)


Título: Re: [SOLUCIONADO] problema con Random
Publicado por: seba123neo en 18 Enero 2013, 19:52 pm
Código
  1. Public Class Form1
  2.  
  3.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  4.        MsgBox(GetRandomNumber(1, 100))
  5.    End Sub
  6.  
  7.    Public Function GetRandomNumber(ByVal pMin As Integer, ByVal pMax As Integer) As Integer
  8.        Return New Random().Next(pMin, pMax)
  9.    End Function
  10. End Class