中位数 c# 错误计算

median c# wrong calculate

当我输入 1,2,3 时我的中位数计算有问题我的中位数是 = 44 我不知道为什么

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();

那是因为44,的ASCII值。而在你的string中,现在使用你现在的方法,中位数是逗号字符, value = 44

要获得中位数,考虑将字符串按 , 拆分,然后 将每个值转换为数值数据 (如 int),然后排序它并简单地获得排序数据中的中间值..

double wynik = 0;
string x1 = textBox1.Text;
int[] tab = x1.Split(',').Select(x => Convert.ToInt32(x)).ToArray(); //this is the trick
int n = tab.Length;    
Array.Sort(tab);
int median = tab[n/2]; //here is your median

你的问题是你计算的是字符而不是数字。
假设您的 textBox1.Text"1,2,3"。然后 x1[(n/2)-1] 将指向 字符 '1',其 double 值为 48 或其他值。

您需要使用 int.Parse:

将字符串解析为 int
int[] tab = x1.Split(',').Select(s => int.Parse(s)).ToArray();

然后再次使用这些值代替字符串:

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

static void Main(字符串[] args) {

        Console.WriteLine("Define Array Size");
        int size = Convert.ToInt32(Console.ReadLine());
        float reference = 0;
        int[] newArray = new int[size];
        for (int i = 0; i < newArray.Length; i++)
        {
            newArray[i] = Convert.ToInt32(Console.ReadLine());
            reference = reference + newArray[i];
        }
        float Median = reference / newArray.Length;
        Console.WriteLine("The Median is ="+Median);
    }