Es una boludez lo que no puedo hacer, el problema estara en como creo el random, ya que no se si sale el 0 y tambien me confundo con .net lo que pasa porque hacia mucho que no tocaba vb6 y digo esto porque talvez tengo problemas con los bucles con los valores posibles de i
Esto que dejo crea un bucle infinito dentro del do-loop while y la idea es que tome los items del listbox y los meta al azar en el array nombre()
Private Sub Form_Load()
Dim i As Integer
Dim j As Integer
Dim sigue As Boolean
Dim ran As Integer
ReDim Equipo(frmChampion.ListNombre.ListCount)
ReDim Nombre(frmChampion.ListNombre.ListCount)
Cant = frmChampion.ListNombre.ListCount
For i = 0 To UBound(Nombre)
Do
Randomize
ran = Int(Rnd() * Cant + 1)
Loop While Nombre(ran) <> vbNullString
Nombre(ran) = frmChampion.ListNombre.List(i)
For j = 0 To Cant
If Nombre(j) = vbNullString Then
sigue = True
End If
Next
If sigue = False Then
Exit For
End If
Next
For j = 0 To UBound(Nombre)
Debug.Print Nombre(j)
Next
End Sub
HOLA!!!
Usa esta funcion:
Private Function RandomizeArray7913(arr() As Long) As Long()
'cambiar ACA-v abajo* ACA-^ ACA-^ para cambiar el tipo
Dim auxArr() As Long
Dim pos As Long
Dim lb As Long
Dim ub As Long
Dim ct As Long
Randomize Timer
ct = lb
lb = LBound(arr)
ub = UBound(arr)
ReDim auxArr(lb To ub)
pos = Int(Rnd() * (ub - lb + 1 )) + lb
auxArr(pos) = arr(ct)
ct = ct + 1
While ct <= ub
pos = Int(Rnd() * (ub - lb + 1 )) + lb
While auxArr(pos) <> 0 'PARA VARIANT NOT ISEMPTY(AUXARR(POS)) PARA STRING AUXARR (POS) <> ""
pos = Int(Rnd() * (ub - lb + 1 )) + lb
Wend
auxArr(pos) = arr(ct)
ct = ct + 1
Wend
RandomizeArray7913 = auxArr
End Function
Asi se usa:
Private Sub Form_Load()
Dim a(9) As Long
Dim b() As Long
For x = 0 To 9
a(x) = x
Next
b = RandomizeArray7913(a)
For x = LBound(b) To UBound(b)
Debug.Print b(x)
Next
End Sub
GRACIAS POR LEER!!!
http://foro.elhacker.net/programacion_visual_basic/source_cpushsort-t340133.0.html
Dulces Lunas!¡.
Gracias por las molestia pero me sigue creando un bucle infinito y tengo que terminar la aplicacion.
Si pueden mirar mi codigo que esta bien entendible pienso y me dicen que hice mal, les agradezco
Cant = frmChampion.ListNombre.ListCount //Supongamos que es 8 (0 a 7)
For i = 0 To UBound(Nombre)
Do
Randomize
ran = Int(Rnd() * Cant + 1)
'Tienes una lista con 8 campos (0 a 7), al hacer Rnd*8 el numero maximo será 7
'Pero como le sumas 1, RAN podría valer 8, que sería un valor fuera de rango.
Loop While Nombre(ran) <> vbNullString
'El ciclo se romperá "por suerte" :D, podrían salir solo 4's, 6's o 2's en cuyos
'campos siempre habría una cadena valida, lo que permitiría la inmortalidad del ciclo.
Saludos!
Como? mi idea con ese bucle es que genere numeros hasta que nombre(esenumero) no contenga nada, asi le pone el valor del item i
O lo estoy haciendo mal? no te entendi bien, dime q puedo cambiar ahi.
numeros aleatorios sin repeticion?...
http://foro.elhacker.net/programacion_visual_basic/src_crndnumbersnr_generar_numeros_aleatorios_sin_repetir_veryfast-t328967.0.html
Dulces Lunas!¡.
Alguien que me diga la parte del codigo mio que esta mal?
Ya pude, le cambie lo que dijo Ignorante, de quitarle el + 1 que yo habia puesto que ya ni me acuerdo porque.
Y le puse que los bucles sean hace ubound(nombre) -1
Pero ahora.. la gran pregunta.. porque? Si yo creo un array(6) , el ubound(array) sera igual a 6? no tendria que ser igual a 5? Cometi ese error que tendria que saberlo no se porque me confundo cuando programo en C# y luego paso a vb6, si todos los arrays se inician en 0 y es lo mismo, o no se , si alguien me explica esto re basico, le agradezco.
Ya me explicaron y mi confuncion fue porque en C# al hacer:
string[] hola = new string[6]
El array hola ira desde 0 to 5
Sin embargo en vb6
dim hola(6) as string
El array hola ira desde 0 to 6 no?
dim hola(6) as string
No, estás reservando 6 campos, 0 al 5.
Creo que en C# es lo mismo quen en VB. Casi todos los arrays inician en 0, a menos que especifiques lo contrario:
Citarmiarray(1 to 6)
Saludos!
Me saque las dudas y estoy en lo correcto yo :/
Cita de: ignorantev1.1 en 28 Septiembre 2011, 20:34 PM
dim hola(6) as string
No, estás reservando 6 campos, 0 al 5.
Creo que en C# es lo mismo quen en VB. Casi todos los arrays inician en 0, a menos que especifiques lo contrario:
Saludos!
esta reservando 7 espacios ya que el 0 cuenta, si quieres que no haya cero cambialo desde el
Option Base
No se que me pasaba pero ya volvi a entenderle la mano y ya mejore muchisimo mi codigo asqueroso xD
max = UBound(Equipo)
For i = 0 To max
Do
Randomize Time
ran = CInt(Rnd() * max)
Loop While Ordenado(ran) <> ""
Ordenado(ran) = Equipo
Next
xDD Lo dejo por si las moscas..