2013-07-16 31 views
0

在這個類中有一個Rational構造函數,它將兩個數字作爲參數並將它們轉換爲分數。它使用私有方法gcd將分數減少到最低的可能條件。

這部分我不明白爲什麼Rational構造函數在計算dem時使用Math.abs(y)以及if條件背後的用途。因此,當閱讀if條件時,如果分母小於0(例如-4),將den = -4或將num改爲正4?例如,如果對於Rational參數有(-4,-8),Rational的構造函數值是1/2還是-1/-2?有理方法 - 分子和分母

public class Rational { 

public Rational (int x, int y){ 
    int g = gcd(Math.abs(x), Math.abs(y)); 
    num = x/g; 
    dem = Math.abs(y)/g; 
    if (y < 0) num = -num; 
    } 


private int gcd(int x, int y){ 
    int r = x % y; 
    while (r != 0){ 
    x = y; 
    y = r; 
    r = x % y; 
    } 
    return y; 
    } 

private int num; 
private int dem; 
} 

回答

3

這個類的作者希望標記由分子攜帶。分母總是正面的。所以如果輸入是6/-8,結果將是-3/4。你的另一個例子也是正確的:-6/-8構造3/4。

+0

好的非常感謝。這對我來說有點困惑。 –

+0

如果輸入是(-4,-8),那麼GCD是4,因此num被創建爲-4/4 = -1,den作爲abs(-8)/ 4 = 8/4 = 2,但是之後由於y < 0號變爲-num導致1/2,這實際上等於-4/-8。 – hivert

+0

非常感謝。我現在明白了。得到我的部分是if語句處理分母的條件,但if語句的主體是處理分子。那部分讓我混淆了。 –