[SOLUCIONADO] problema con Random

Iniciado por Eleкtro, 18 Enero 2013, 17:18 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

¿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 (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       Dim a As New List(Of String)
       For x As Integer = 0 To 10 : a.Add(Get_Random_Number(1, 100)) : Next

       For Each f In a : MsgBox(f) : Next ' El número siempre es el mismo

   End Sub

   Public Function Get_Random_Number(ByVal min As Integer, ByVal max As Integer) As Integer
       Dim Rando As New Random
       Return Rando.Next(min, max)
   End Function

End Class








$Edu$

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.

kub0x

#2
Para obtener 2 valores aleatorios, en vez de usar Random, utillizo la función Rnd(), espero que lo tengas en cuenta.

Código (VB.NET) [Seleccionar]

Private Sub GetRandomNumbers(Byval Min as int32, Byval Max as int32)
' Inicializamos el generador de nº aleatorios
Randomize()
' Generamos un valor aleatorio entre 50 y 100
Dim Valor As Integer = CInt(Int((100 * Max()) + Min))
return Valor
End Sub


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

Saludos!
Viejos siempre viejos,
Ellos tienen el poder,
Y la juventud,
¡En el ataúd! Criaturas Al poder.

Visita mi perfil en ResearchGate


Novlucker

#3
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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro

#4
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.

Citar1- 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 (vbnet) [Seleccionar]
   Private Sub GetRandomNumbers(Byval Min as int32, Byval Max as int32)
   ' Inicializamos el generador de nº aleatorios
   Randomize()
   ' Generamos un valor aleatorio entre 50 y 100
   Dim Valor As Integer = CInt(Int((100 * Max()) + Min))
   return Valor
   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"








Danyfirex

#5
Código (vbnet) [Seleccionar]
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 (vbnet) [Seleccionar]
Public Function GetRandom(ByVal Min As Integer, ByVal Max As Integer) As Integer
   Dim Generator As System.Random = New System.Random()
   Return Generator.Next(Min, Max)
End Function



edito otra vez. :S

seba123neo se adelanto.

hahaha

saludos

Eleкtro

#6
Grax :)








seba123neo

Código (vbnet) [Seleccionar]
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        MsgBox(GetRandomNumber(1, 100))
    End Sub

    Public Function GetRandomNumber(ByVal pMin As Integer, ByVal pMax As Integer) As Integer
        Return New Random().Next(pMin, pMax)
    End Function
End Class
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson