2016-05-21 11 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

あなたのコードは意味がありません。 'fraction'はどこに宣言されていますか? –

+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 
} 
関連する問題