我在我的分数类中有这个方法,
public void toImproper() {
if (denom == 0) {
denom = 1;
}
num = (denom * coeff) + num;
coeff = 0;
}
我一直在使用这个分数计算器中的一些测试用例,例如-1_1 / 2 * 2,但我得到1作为我的答案(下一段清除了这一点)。
起初我把它变成了不正确的形式,因为我得到了输入,但是再次使它不合适给我一些问题。由于我的方法,它正在使-1_1 / 2 = -1/2。不正确形式的-1_1 / 2应为-3/2,但我的方法给出-1/2。这是因为它将系数乘以分母然后加上分子。所以对于分子你得到(-1 * 2)+ 1.我该如何解决这个问题?我想过使用Math.abs();但随后它使所有负面因素都是积极的。
谢谢!
答案 0 :(得分:0)
问题基本上是如果输入-1 1/2(coeff=-1
,num=1
,denom=2
),程序会将其视为(-1)+(1/2) )。也就是说,它将1/2部分解释为正面,就像通常那样。你需要做一些特殊的事情来欺骗程序,在这种情况下,1/2 真的意味着-1/2。
在分配给num
之前插入此内容是欺骗程序的一种方法:
if (coeff < 0) {
num = -num;
}