2015-01-20 67 views
-1

我试图退出检查条件(我意识到如果我抛出一个异常,但我试图避免这个项目),返回void的方法。我有下面的代码,如果我正确解释它,应该返回if语句,但整个方法仍在执行。代码中是否存在问题(如果需要,我可以发布更多内容),还是有更好的方式来编写此代码,而无需处理异常?从方法返回无效,以防止执行

void Rational::divide(Rational b) { 
    if (b.numerator == 0) { 
     cout << "Cannot divide by zero." << endl; 
     return; 
    } else if (b.numerator != 0) { 
     numerator = numerator * b.denominator; 
     denominator = denominator * b.numerator; 
     reduce(); 
    } 
} 

编辑:我已更新代码以反映一些建议;只是为了澄清,if语句本身正在正确执行(如果b为零,我会得到错误消息) - 一旦打印出错信息,方法的其余部分继续运行。

编辑2:更新为else if修订。

+0

检查你的条件为什么是错误的。您应该检查分母是否等于零,而不是计算结果。 – mic4ael 2015-01-20 21:26:53

+4

您的if语句实际上是检查分子是否为0.您需要将其更改为if(b.deominator == 0) – 2015-01-20 21:27:54

+0

@Rubix Rechvin我很确定if语句正在按照意图进行操作。该函数除以'b',我们需要确保reational值不为零,因此检查分子是否为零。有可能是'b'参数的分子实际上并不是'0'。 – 2015-01-20 21:40:50

回答

0

这就是你在做什么。您可能希望在您的if声明中执行类似操作:if((double)b.denominator == 0.f)

由于它们在内存中的表现方式,与浮点数或双精度浮点数进行比较时,您应该小心。它几乎不会完全是零,所以你应该比较一个epsilon。

+1

划分产生零点不是不可能的,它只需要分子为零。 – 2015-01-20 21:28:46

+4

你不应该在'double'中使用'=='。 – Julian 2015-01-20 21:29:18

+0

您可以随时使用:if(b.deominator <0.0001 && b.denominator> -.0001)而不是== – 2015-01-20 21:31:38