2016-05-21 52 views
-1

所以我試圖用分數類作爲數組排序分數。即使我認爲我的操作符也有些問題,但我無法測試它,因爲我給出的輸出始終是覆蓋整個數組的最後一個數字,我不知道是什麼導致了這種情況。如何防止最後一個數字覆蓋數組?

主類:(不包括排序方法)

 int m; 
     int n; static Fraction fraction = new Fraction();//edited 
     int denominator; 
     int numerator; 
     Fraction[] frac;//fraction 
     string l = Console.ReadLine(); 
     string[] split = l.Split(' '); 
     m = Int32.Parse(split[0]); 
     n = Int32.Parse(split[1]); 
     frac = new Fraction[m]; 
     for (int i = 0; i < m; i++) 
     { 
      string o = Console.ReadLine(); 
      string[] split2 = o.Split(' '); 
      denominator= Int32.Parse(split2[0]); 
      numerator= Int32.Parse(split2[1]); 
      fraction.denominator= denominator; 
      fraction.numerator= numerator; 
      frac[i] = fraction;//put the numbers in the 
           //array 
     } 
     if (m < n) 
      SelectionSort(frac); 
     else 
      QuickSort(frac, 0, m - 1); 

     for (int i =0; i< m; i++) 
     { 
      Console.WriteLine(frac[i]); 
     } 

這是分數等級:

int denominator; 
    int numerator; 

    public int denominator 
    { 
     get { return denominator; } 
     set { denominator= value; } 
    } 

    public int numerator 
    { 
     get { return numerator; } 
     set { numerator= value; } 
    } 

    public static bool operator <(Fraction left, Fraction right) 
    { 
     var diff = left.denominator* right.numerator- right.numerator* left.denominator; 
     return diff < 0; 
    } 

    public static bool operator >(Fraction left, Fraction right) 
    { 
     var difference= left.denominator* right.numerator- right.numerator* left.denominator; 
     return !(difference> 0); 
    } 

    public override String ToString() 
    { 
     return String.Format("{0} {1}", this.denominator, this.numerator); 
    } 

我甚至不能測試我的運營商(從未使用直到現在)是否由於數組錯誤,所以正在工作或沒有工作。任何建議如何找到錯誤?

+0

您的代碼是沒有意義的。 「分數」在哪裏申報? –

+0

對不起,我忘了在代碼中添加,但部分是在聲明的主類中:static Fraction fraction = new Fraction(); 我會在代碼中加入 – nate

+0

爲什麼你聲明它是靜態的? –

回答

1

問題出在您的for循環中。您總是一遍又一遍地編輯相同的Fraction對象(並且您的數組充滿了同一對象的副本)。

更改您的密碼在你的循環的每個迭代實例化一個新的Fraction

for (int i = 0; i < m; i++) 
{ 
     string o = Console.ReadLine(); 
     string[] split2 = o.Split(' '); 
     denominator= Int32.Parse(split2[0]); 
     numerator= Int32.Parse(split2[1]); 

     var fraction = new Fraction(); // Added line 
     fraction.denominator= denominator; 
     fraction.numerator= numerator; 
     frac[i] = fraction;//put the numbers in the array 
}