Autor Tema: C# trato de calcular moda valores en ListBox items pero solo me da otros números  (Leído 4197 veces)

Emmanueltr9

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
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());
« Última modificación: 07 de Junio 2020, 13:54 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Trato de calcular moda pero solo me da otros numeros
« Respuesta #1 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;
                }

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

Emmanueltr9

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re:Trato de calcular moda pero solo me da otros numeros
« Respuesta #2 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());
« Última modificación: 07 de Junio 2020, 13:54 por Ogramar »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Trato de calcular moda pero solo me da otros numeros
« Respuesta #3 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.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".