Test Foro de elhacker.net SMF 2.1

Programación => Programación General => Mensaje iniciado por: nolasco281 en 7 Mayo 2014, 13:51 PM

Título: Problema con instruccion
Publicado por: nolasco281 en 7 Mayo 2014, 13:51 PM
Hola como estan

disculpen las molestias

El problema que tengo es con la siquiente instruccion

Código (vb) [Seleccionar]
Dim valores() As String = listaElementos.Items.Cast(Of String).OrderBy(Function(s) CDec(s)).ToArray

el error dice

Código (vb) [Seleccionar]
Unable to cast object of type 'System.Double' to type 'System.String'.

gracias saludos

Título: Re: Problema con instruccion
Publicado por: NikNitro! en 7 Mayo 2014, 17:01 PM
En que lenguaje? Podrías dar más code para el contexto? (No siempre un error está en la misma línea). Qué piensas que debería hacer esa línea?

Y por último... Te ha dado por leer el error?

Saludos ;)
Título: Re: Problema con instruccion
Publicado por: nolasco281 en 7 Mayo 2014, 18:45 PM
Hola gracias por responder

tengo este codigo que es un boton que calcula la mediana

Ahora bien el problema es que cuando se calcula en la mediana y su resultado pasa a un txtbox
y despues calculo la moda me surge ese error antes dicho. no puedo ejecutar los dos al mismo tiempo. el resultado de los calculos se impremen en diferentes textbox.

Estoy trabajando en visual basic.


Código (vbnet) [Seleccionar]
Private Sub btnCalMediana_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalMediana.Click
       Dim temporal As Double
       Try
           Dim valores() As String = listaElementos.Items.Cast(Of String).OrderBy(Function(s) CDec(s)).ToArray
           If listaElementos.Items.Count Mod 2 = 1 Then 'impar
               txtMediana.Text = (valores(CInt(Math.Floor(listaElementos.Items.Count / 2))))
           Else 'par
               txtMediana.Text = (((CDec(valores(listaElementos.Items.Count \ 2 - 1)) + CDec(valores(listaElementos.Items.Count \ 2))) / 2).ToString)
           End If
       Catch ex As Exception
           MsgBox("No puede hacer eso")
       End Try

       'Ordena los elementos de menor a mayor en la lista
       For elementos = 0 To listaElementos.Items.Count - 1
           For ordenar = 0 To listaElementos.Items.Count - 2
               If (listaElementos.Items.Item(ordenar) > listaElementos.Items.Item(elementos)) Then
                   temporal = listaElementos.Items.Item(ordenar)
                   listaElementos.Items.Item(ordenar) = listaElementos.Items.Item(elementos)
                   listaElementos.Items.Item(elementos) = temporal
               End If
           Next
       Next
   End Sub



y este es otro boton que calcula la moda

Código (vbnet) [Seleccionar]
Private Sub btnCalModa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalModa.Click

       Dim valores() As String = listaElementos.Items.Cast(Of String).OrderBy(Function(s) CDec(s)).ToArray
       Dim concurrencias() As Integer = Array.ConvertAll(valores, Function(s1) valores.Count(Function(s2) s2 = s1))

       Dim hecho As New List(Of String)
       Dim salida As String = ""
       For x As Integer = 0 To concurrencias.GetUpperBound(0)
           If concurrencias(x) = concurrencias.Max AndAlso Not hecho.Contains(valores(x)) Then
               hecho.Add(valores(x))
               salida &= valores(x) & ", "
           End If
       Next
       txtModa.Text = (String.Format("{0}{1}{2}", If(hecho.Count = 1, "", If(hecho.Count = 2, "Bimodal, ", "Multimodal, ")), Environment.NewLine, salida.TrimEnd(","c, " "c)))
   End Sub


por si no me explico cuando calculo la media bien si calculo la moda me salta error
pero si calculo la moda primero y despues la mediana no me da error

aca la muestra

(http://4.bp.blogspot.com/-1Cuc7cSpOY0/U2pmtCidSdI/AAAAAAAAAuQ/CQ6KKWQ9Xy4/s1600/problema.png)

si calculo primero la moda y despues la mediana no causa error

(http://1.bp.blogspot.com/-IsSajNWQgjQ/U2ppHRpHypI/AAAAAAAAAuc/hWjO0WSgO3Y/s1600/otro.png)

Gracias de nuevo.

Pd: por lo que entiendo dice que tengo que convertir un double o string si no me equivoco pero no se como hacerlo.