Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Emmanueltr9 en 29 de Mayo 2019, 05:00

Título: C# trato de calcular moda valores en ListBox items pero solo me da otros números
Publicado por: Emmanueltr9 en 29 de Mayo 2019, 05:00
Hola, este es el código con el que estoy tratando de calcular la moda obteniendo los valores de un listbox pero no logro hacer que funcione:

Código: [Seleccionar]
int maximaVecesQueSeRepite = 0;
            int numeros= listBox1.Items.Count;
            int moda = 0;
            //Codigo para sacar la moda.
            for (int i = 0; i < edad; i++)
            {
                int vecesQueSeRepite = 0;
                for (int j = 0; j < edad; j++)
                {
                    if (numeros.ToString()[i] == numeros.ToString()[i])
                    {
                        vecesQueSeRepite++;
                    }
                }
                if (vecesQueSeRepite > maximaVecesQueSeRepite)
                {
                    moda = numeros;
                }
                MessageBox.Show(moda.ToString());
Título: Re:Trato de calcular moda pero solo me da otros numeros
Publicado por: Kabuto en 29 de Mayo 2019, 19:55
en el if estás comparando exactamente el mismo número:

Citar
if (numeros.ToString()[i] == numeros.ToString()[i])

Cámbialo así:

Citar
if (numeros.ToString()[i] == numeros.ToString()[j])

Por otra parte, el valor de maximaVecesQueSeRepite ha de ser actualizado cada vez que encuentres un número que supere ese máximo de repeticiones. Fijate que su valor SIEMPRE es 0, nunca está variando, así que cualquier número que se repita una sola vez, lo va a superar.

Supongo que te interesa actualizarlo así:

Citar
                if (vecesQueSeRepite > maximaVecesQueSeRepite)
                {
                    moda = numeros;
                    maximaVecesQueSeRepite = vecesQueSeRepite;
                }

Título: Re:Trato de calcular moda pero solo me da otros numeros
Publicado por: Emmanueltr9 en 30 de Mayo 2019, 00:37
Ya lo he arreglado pero ahora me da error. El código es este:

Código: [Seleccionar]
int maximaVecesQueSeRepite = 0;
            int edad = listBox1.Items.Count;
            int moda = 0;
            //Codigo para sacar la moda.
            for (int i = 0; i < edad; i++)
            {
                int vecesQueSeRepite = 0;
                for (int j = 0; j < edad; j++)
                {
                    if (edad.ToString()[i] == edad.ToString()[j])
                    {
                        vecesQueSeRepite++;
                    }
                }
                if (vecesQueSeRepite > maximaVecesQueSeRepite)
                {
                    moda = edad;
                    maximaVecesQueSeRepite = vecesQueSeRepite;
                }
                MessageBox.Show(moda.ToString());
Título: Re:Trato de calcular moda pero solo me da otros numeros
Publicado por: Kabuto en 30 de Mayo 2019, 19:26
Aquí te falta el indice i

Citar
  if (edad.ToString()[i] == edad.ToString()[j])

Por otro lado, no se mucho de C# (¿o estas con VB.net?).
Me baso en tu código para suponer que es correcto usar indices tras la invocación de ToString()

Es más, esto me resulta un poco extraño_
Código: [Seleccionar]
int edad = listBox1.Items.Count;
A mí eso me suena que estás metiendo en la variable edad la longitud de listBox1.
Es decir, eso te daría cuántos items tiene ese listBox.

Pero no se si estás metiendo la edades. Apostaría que no, pues la variable edad es un simple int, así que tan solo puede almacenar un único valor numérico.
Como mucho, podrías guardar una de las edades.., pero es que me parece que ni siquiera eso es lo que contiene, sino como dije, lo que tiene es la longitud de listBox1.

Siento no poder ayudarte mejor, lo mio es Java... pero, desde mi desconocimiento de otros lenguajes, diría que ese código no está haciendo lo que tú necesitas y tendrías que revisarlo.

Espero que alguien más hábil que yo en este foro te pueda orientar.