中位数c#错误计算

时间:2016-03-30 17:11:38

标签: c# winforms median

我在计算中位数时遇到问题,当我把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();

3 个答案:

答案 0 :(得分:7)

这是因为44,的ASCII值。在您的string中,现在使用您当前的方法,中位数是逗号字符,值= 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

答案 1 :(得分:1)

你的问题是你用字符而不是数字来计算 所以,让我们说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

答案 2 :(得分:0)

static void Main(string [] 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);
    }