2016-03-30 4 views
1

У меня есть проблемы с расчетом медианы, когда я поставил 1,2, 3 моей медианы = 44 я не знаю, почемуМедиана C# неправильно рассчитать

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

Вы рассчитываете u петь коды символов, а не цифры - вот почему. Попробуйте разобрать их, используя 'int.Parse()' –

ответ

1

Ваша проблема заключается в том, что вы расчета с символами вместо числа.
Итак, скажем, ваш textBox1.Text - "1,2,3". Затем x1[(n/2)-1] будет указывать на символ '1', который имеет значение double48 или что-то в этом роде.

Вам нужно разобрать строки в междунар с помощью 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 
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 
0

статической сила основной (String [] арг) {

 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

. Просто отправьте фрагмент кода здесь не очень. Не могли бы вы дать какой-то контекст, * как * и * почему * он решает проблему OPs? См. Также [ответ]. –

 Смежные вопросы

  • Нет связанных вопросов^_^