如何防止最后一个数字覆盖数组?

时间:2016-05-21 12:48:02

标签: c#

所以我试图用分数类作为数组对分数进行排序。即使我认为我的操作员也有问题,我无法测试它,因为我给出的输出总是覆盖整个数组的最后一个数字,我真的不知道是什么导致了这个。

主要类:(排除排序方法)

    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);
    }

这是分数类:

getcwd()

我甚至无法测试我的操作符(从未使用过,直到现在),无论它们是否正常工作,因为数组错误。有任何建议如何找到错误?

1 个答案:

答案 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
 }