Search code examples
c#winformsmedian

median c# wrong calculate


I have problem with the calculation of the median when I put 1,2, 3 my median is = 44 i don't know why

double wynik = 0;
string x1 = textBox1.Text;
string[] tab = x1.Split(',');
int n = tab.Length;

Array.Sort(tab);

if (n % 2 == 0)
{
    double c = x1[(n / 2) -1];
    double v = x1[(n / 2)];
    wynik = (c + v) / 2;
}
else
    wynik = x1[n / 2];

        textBox2.Text = wynik.ToString();

Solution

  • Your problem is that you are calculating with characters instead of number.
    So let's say your textBox1.Text is "1,2,3". Then x1[(n/2)-1] would point at the character '1', which has the double value of 48 or something.

    You need to parse the strings into int using int.Parse:

    int[] tab = x1.Split(',').Select(s => int.Parse(s)).ToArray();
    

    And then use these values instead the string again:

    if (n % 2 == 0)
    {
        double c = tab[(n / 2) -1]; // tab instead of x1!
        double v = tab[(n / 2)]; // tab instead of x1!
        wynik = (c + v) / 2;
    }
    else
        wynik = tab[n / 2]; // tab instead of x1