中位数 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);
}
当我输入 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[] 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);
}