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