我明天有一个作业,必须用整数加上和减去分数,我对所有这些数字都有点困惑,而数学也没有帮助。
它正在正确地执行数学,但是当它应该为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);
这就是我目前得到的结果:
任何帮助将不胜感激!提前致谢。 奥斯汀
答案 0 :(得分:3)
我认为你的问题就在这一行:
whole = temp1 / temp2
您似乎无意中修改了当前实例的whole
值。这就是导致fra1
'神奇地'从1/2
更改为1 1/2
的原因。请使用临时变量来解决问题,但我也建议进行类似的调整,以避免意外修改other
的字段以及删除明显存在的newnum
字段用于计算的临时占位符。
如果您打算让此类不可变,我还建议您使用每个字段readonly
来避免这些错误。