2016-03-30 21 views
1

を計算し、3私の中央値は、私にはわからない= 44である理由44がASCII値であるためである中央値C#の間違った私は1,2を入れ、中央値の計算に問題がある

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

あなたは数字ではなく文字コードを歌うことが理由です。 'int.Parse()'を使って解析してみてください –

答えて

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 
7

,です。そして、あなたの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

静的な無効メイン(文字列[] 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

コードスニペットをポストするだけではあまりよくありません。あなたはいくつかの文脈を与えてください、*どうやって*それがOPの問題を解決するのか* [回答]も参照してください。 –

関連する問題