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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Rellenar con rand no me funciona
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Rellenar con rand no me funciona  (Leído 4,307 veces)
luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Rellenar con rand no me funciona
« en: 29 Marzo 2015, 12:20 pm »

Otra de las mias
cuando quiero unir dos rutinas o mas no me funciona lo de rellenar con numeros aleatorios dentro del rango

se supone que este codigo al no haber mas numeros dentro del arreglo tomaria uno al azar dentro del rango establecido pero no se que pasa ahora que no lo hace


Código
  1.   ReadOnly MAX As Integer = 99
  2.  
  3.  
  4.        Dim Rand As New Random
  5.        Dim ReAsult2255e As IEnumerable(Of Integer) =
  6.           (splits(1).Concat(splits(3).Concat(splits(5).
  7.           Distinct.
  8.           Select(Function(Value As Integer)
  9.                      Return If(Value < MAX, Value, Rand.Next(1, MAX))
  10.                  End Function))))
  11.  
  12.        Dim seAlecctedValues231 As IEnumerable(Of Integer) = ReAsult2255e
  13.        Dim liste3 As List(Of Integer) = ReAsult2255e.Take(10).ToList
  14.        liste3.Sort()
  15.        ListBox12.Items.AddRange(liste3.Cast(Of Object).ToArray)
  16.        ' ----------------------------------------------------------------------
  17.  
  18.  
  19.       Dim Rand1 As New Random
  20.        Dim AReAAsult2255e As IEnumerable(Of Integer) =
  21.           (splits(3).Concat(splits(10).Concat(splits(11).Concat(splits(12).
  22.           Distinct.
  23.           Select(Function(Value As Integer)
  24.                      Return If(Value < MAX, Value, Rand1.Next(1, MAX))
  25.                  End Function)))))
  26.  
  27.        Dim seAlecctedValues231A As IEnumerable(Of Integer) = AReAAsult2255e
  28.        Dim listeA3 As List(Of Integer) = AReAAsult2255e.Take(10).ToList
  29.  
  30.        listeA3.Sort()
  31.        ListBox13.Items.AddRange(listeA3.Cast(Of Object).ToArray)


Luis




« Última modificación: 2 Abril 2015, 05:34 am por luis456 » En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Rellenar con rand no me funciona
« Respuesta #1 en: 29 Marzo 2015, 13:02 pm »

No te funciona cómo esperas porque, en los dos casos que has mostrado, estás aplicando el Distinct y el Select solamente a la última concatenación, puesto que tienes las agrupaciones del Concat abiertas:

Citar
Código
  1. (splits(3).Concat(splits(10).Concat(splits(11).Concat(splits(12).
  2. Distinct.
  3. Select(Function(Value As Integer)
  4.       Return If(Value < MAX, Value, Rand1.Next(1, MAX))
  5. End Function)))))

Para solucionarlo, simplemente fíjate mejor en las concatenaciones que haces en 'ReAsult2255e' y 'AReAAsult2255e', cierra las agrupaciones de ambos correctamente:

Código
  1. (splits(3).Concat(splits(10)).Concat(splits(11)).Concat(splits(12))).
  2. Distinct.
  3. Select(Function(value As Integer)
  4.       Return If(Value < MAX, Value, Rand1.Next(1, MAX))
  5. End Function)

Se que no te gusta oir esto, pero es que no tendrías ese tipo de problemas si ordenases y estructurases mejor tú código, es un completo lio lo que tienes ...y lo sabes.

En mi opinión, lo mejor para ti es que fueses haciendo las cosas por partes, poco a poco, cómo en este ejemplo de abajo donde construyo la colección paso a paso,
haciendolo de esta manera te ayudarías a ti mismo a debuguear el código mejor, al poder recurrir/conocer facilmente el estado de la colección antes de hacerle una modificación (cómo la del Select) para hacerle cambios con menos esfuerzo, y también reducir los errores que tienes de mal agrupamiento, o etc:

Código
  1. Dim concatCol As IEnumerable(Of Integer) = col1.Concat(col2)
  2. Dim distinctCol As IEnumerable(Of Integer) = concatCol.Distinct
  3. Dim selectCol As IEnumerable(Of Integer) = distinctCol.Select(Function(value As Integer)
  4.                                                                  If value < max Then
  5.                                                                      Return value
  6.                                                                  Else
  7.                                                                      Return rand.Next(1, max)
  8.                                                                  End If
  9.                                                              End Function)

Saludos


« Última modificación: 29 Marzo 2015, 13:29 pm por Eleкtro » En línea



luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Re: Rellenar con rand no me funciona
« Respuesta #2 en: 29 Marzo 2015, 14:11 pm »

Se que no te gusta oir esto, pero es que no tendrías ese tipo de problemas si ordenases y estructurases mejor tú código, es un completo lio lo que tienes ...y lo sabes.

Claro que si lo se, pero tengo una grave problema y es siempre la " P " prisa de ver cono funciona y siempre digo " despues lo ordeno "  y asi vamos  :(  tengo que tratar de ser mas ordenado y valla tambien para los que estan aprendiendo a Programar es un sano consejo que nos da Elektro y se agradece :)

Luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Re: Rellenar con rand no me funciona
« Respuesta #3 en: 30 Marzo 2015, 18:42 pm »

Sigo teniendo problemas con esto pense que lo podria resolver yo pero na :(

he probado a cambiar las declaraciones del rango max de estas formas pero no me me va y cuando algo hizo solo relleno con ceros ???

la funcion que uso no calcula una cantidad fija de numeros y dependiendo de eso, a veces va bien pero creo cuando se queda corto de cantidad de numeros me sale este error en tiempo de ejecucion

El valor no puede ser nulo.
Nombre del parámetro: second




 
 
Código
  1. ReadOnly MAX As Integer = 99  ( de cualquiera de las formas no hace nada )
  2. Dim MAX As Integer = 99


Código
  1.  Dim concatCol5 As IEnumerable(Of Integer) = splits(3).Concat(splits(13).Concat(splits(15)))
  2.        Dim distinctCol5 As IEnumerable(Of Integer) = concatCol5.Distinct
  3.        Dim selectCol5 As IEnumerable(Of Integer) = distinctCol5.Select(Function(value As Integer)
  4.                                                                            If value < MAX Then
  5.                                                                                Return value
  6.                                                                            Else
  7.                                                                                Return Rand.Next(1, MAX)
  8.                                                                            End If
  9.  
  10.                                                                        End Function)
  11.  
  12.  
  13.  
  14.        ListBox9.Items.AddRange(selectCol5.Cast(Of Object).ToArray)



Luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: Rellenar con rand no me funciona
« Respuesta #4 en: 30 Marzo 2015, 20:13 pm »

El valor no puede ser nulo.
Nombre del parámetro: second

El error es self-explanatory, se explica por si mismo, date cuenta, la segunda secuencia que estás intentando concatenar a la primera secuencia es una referencia nula (es decir, no se le ha asignado ningún valor, la colección no existe), puede ser una de las que he marcado en rojo:

Dim concatCol5 As IEnumerable(Of Integer) = splits(3).Concat(splits(13).Concat(splits(15)))

(y además de eso no has corregido las agrupaciones cómo te dije en el comentario anterior, es decir, los paréntesis, aunque ese no es el motivo del error)

Cómo indica el mensaje de error, para corregirlo solo debes asegurarte de que la colección que le estás pasando al parámetro "second" de la función "concat" no sea una referencia nula.

revisa bien el resto del código, comprueba que splits(13) y splits(15) existan antes de intentar concatenarlos (msgbox( splits(13) is nothing )), no te puedo ayudar a hallar el motivo ya que no forma parte del código que has mostrado.

Este ejemplo que puedes examinar, produce la misma excepción que has comentado, ya que la segunda colección es nula (no confundir con "vacía" {} ):

Código
  1. Dim col1 As IEnumerable(Of String) = {}
  2. Dim col2 As IEnumerable(Of String) ' = Nothing
  3.  
  4. Dim concatCol As IEnumerable(Of String) = Enumerable.Concat(first:=col1, second:=col2)

Saludos
« Última modificación: 30 Marzo 2015, 20:24 pm por Eleкtro » En línea



luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Re: Rellenar con rand no me funciona
« Respuesta #5 en: 30 Marzo 2015, 21:59 pm »

A ver segun los calculos que me hace el programa sabes, me entrega cierta cantidad de numeros que varian desde ( 00 al 99 ) unas veces 50 o mas numeros otras 40 y ciertas ocasiones muchas menos y es aca cuando se produce el error, ya que como casi siempre estan por los 50 numeros no da problemas de este tipo ,solo cuando baja de esa cantidad y claro salta el error, ya que no hay numeros para llenar a  splits(13)  splits(15) pero mayormente no falla, lo que quiero es ver como suplir esos numeros que faltarian y dentro del rango ?


Luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Re: Rellenar con rand no me funciona
« Respuesta #6 en: 31 Marzo 2015, 10:17 am »

Estudiando el caso este descubri que la forma de que no me de error es mantener el arreglo dentro del minimo de registros que es de 35 registros por debajo de esa cantdad me produce el error, ahora lo que no tengo ni idea como hacerlo,se me ocurre con generar numeros aleaorios dentro el rango pero que no repitan con los de la variable  ;(

luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
luis456


Desconectado Desconectado

Mensajes: 551



Ver Perfil
Re: Rellenar con rand no me funciona
« Respuesta #7 en: 2 Abril 2015, 05:33 am »

Para cerrar eseto , aca esta con lo que lo solucione ;) gracias a nuestro amigo elektro   :silbar:

Código
  1. ' aca esta para relleñar con ceros-----------
  2.        If Resultss.Count <35 Then
  3.            Resultss = Resultss.Concat(Enumerable.Repeat(Of Integer)(0, (35 - Resultss.Count)))
  4.  
  5. MsgBox(li.Count) '35
  6.        End If

Luis
En línea

Que tu sabiduria no sea motivo de Humillacion para los demas
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Funcion Rand() con strings en PHP
PHP
Riki_89D 5 10,127 Último mensaje 9 Marzo 2009, 14:37 pm
por cassiani
rand() algo prohibido
Programación C/C++
Komodo 6 4,073 Último mensaje 2 Septiembre 2010, 11:20 am
por Komodo
Problemas con rand
Programación C/C++
luchomax 2 2,052 Último mensaje 2 Febrero 2012, 00:45 am
por rir3760
rellenar con rand variable ya cargada de datos
.NET (C#, VB.NET, ASP)
luis456 8 3,431 Último mensaje 10 Abril 2015, 10:56 am
por luis456
Ayuda con rellenar una matriz con rand()
Programación C/C++
serg2404 7 3,205 Último mensaje 2 Julio 2016, 04:53 am
por serg2404
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines