在c#分数计算器中遇到问题

时间:2014-06-02 22:45:35

标签: c#

我明天有一个作业,必须用整数加上和减去分数,我对所有这些数字都有点困惑,而数学也没有帮助。

它正在正确地执行数学,但是当它应该为0时,它会一直为整个变量加1,而我无法理解为什么会这样。

这是我的Fraction.cs:

class Fraction
{
    int num, den, whole, newnum;

    public Fraction(int numerator, int denominator, int whole = 0)
    {

        this.num = numerator;
        this.den = denominator;
        this.whole = whole;
    }

    public Fraction Add(Fraction other)
    {
        int temp1 = num, temp2 = den;
        if (Math.Abs(this.whole) > 0)
        {
            newnum = temp2 * whole;
            newnum = +temp1;
            temp1 = newnum;
        }
        if (Math.Abs(other.whole) > 0)
        {
            other.newnum = other.den * other.whole;
            other.newnum = +other.num;
            other.num = other.newnum;
        }
        temp1 = temp1 * other.den + temp2 * other.num;
        temp2 = temp2 * other.den;
        if (temp1 == temp2 || temp1 > temp2)
        {
            whole = temp1 / temp2;
            temp1 = temp1 % temp2;
        }

        Fraction newFrac = new Fraction(temp1, temp2, whole);
        return newFrac;
    }
}

在我的Program.cs里面是我的测试:

Fraction fra1 = new Fraction(1, 2);
Fraction fra2 = new Fraction(3, 4, 1);
Fraction fra3 = fra1.Add(fra2);
Console.WriteLine("Fraction 1: " + fra1);
Console.WriteLine("Fraction 2: " + fra2);
Console.WriteLine("{0} + {1} = {2}", fra1, fra2, fra3);

这就是我目前得到的结果:

enter image description here

任何帮助将不胜感激!提前致谢。 奥斯汀

1 个答案:

答案 0 :(得分:3)

我认为你的问题就在这一行:

whole = temp1 / temp2

您似乎无意中修改了当前实例的whole值。这就是导致fra1'神奇地'从1/2更改为1 1/2的原因。请使用临时变量来解决问题,但我也建议进行类似的调整,以避免意外修改other的字段以及删除明显存在的newnum字段用于计算的临时占位符。

如果您打算让此类不可变,我还建议您使用每个字段readonly来避免这些错误。