【发布时间】:2013-02-19 18:42:17
【问题描述】:
我写了一个分数类,但在简化时遇到了麻烦。
当我制作 Fraction 对象时,一切正常,我只是觉得我的逻辑在简化方面很混乱。
(num和den分别是类中的分子和分母的私有变量)
这是我的 GCD 和 Simplify 方法:
/**
* Returns the absolute value of the greatest common divisor of this
* fraction's numerator and denominator. If the numerator or denominator is
* zero, this method returns 0. This method always returns either a positive
* integer, or zero.
*
* @return Returns the greatest common denominator
*/
private int gcd() {
int s;
if (num > den)
s = den;
else
s = num;
for (int i = s; i > 0; i--) {
if ((num % i == 0) && (den % i == 0))
return i;
}
return -1;
}
/**
* Changes this fraction's numerator and denominator to "lowest terms"
* (sometimes referred to as a "common fraction"), by dividing the numerator
* and denominator by their greatest common divisor. This includes fixing
* the signs. For example, if a fraction is 24/-18, this method will change
* it to -4/3. If the numerator or denominator of the fraction is zero, no
* change is made.
*/
public void simplify() {
if (isZero() == false) {// Making sure num or den is not zero.
this.fixSigns(); // Fix signs first
if (gcd() > 1) {
this.num = num / gcd();
this.den = num / gcd();
}
}
}
【问题讨论】:
-
您的问题是什么?这段代码有问题吗?它没有给出好的结果?您期望什么以及正在发生什么?
-
嘿@CyrilleKarmann,这不是简化。我期待像 20/5 这样的分数进入并变成 4。或者 18/4 变成 9/2。
-
我明白了,但它提供的是什么而不是您期望的价值?
-
@CyrilleKarmann 输出的分数与放入的分数相同。
-
@CyrilleKarmann 更正:。输入:15/3,输出:3/3