2011-11-26 120 views
1
public class Number { 
private int numerator; 
private int denominator; 

public Number(int numerator, int denominator) { 
    this.numerator = numerator; 
    this.denominator = denominator; 
} 

public Number() { 
    this.numerator = 0; 
    this.denominator = 1; 
} 

public int getDenominator() { 
    return denominator; 
} 

public int getNumerator() { 
    return numerator; 
} 

public String toString() { 
    if (numerator == 0) { 
     return "0"; 
    } else if (denominator == 1) { 
     return denominator + ""; 
    } 
    return numerator + "/" + denominator; 
} 

public Number subtract(Number other) { 
    numerator = (this.getNumerator() * other.getDenominator()) - (other.getNumerator() * this.getDenominator()); 
    denominator = this.getDenominator() * other.getDenominator(); 

    return this; 
} 

//// 
public class test { 
public static void main(String[] args) { 
    Number n1 = new Number(1, 2); 
    Number n2 = new Number(3, 5); 
    Number n4 = new Number(7, 40); 
    Number test = n2.subtract(n1); 
    System.out.println(test); 
    Number test2 = n4.subtract(n1); 
    System.out.println(test2); 
    Number test3 = n1.subtract(n4); 
    System.out.println(test3); 
    Number test4 = n2.subtract(n1); 
    System.out.println(test4); 

} 
} 

我遇到了number subtract()方法的問題。當我從客戶端調用它的時候,它在某些時候會有效,但是在幾次連續的調用之後,我得到了意想不到的輸出。前兩個電話工作正常,然後我開始得到的結果是遠離。我知道我在減法()方法中丟失了一些東西,只是不確定它是什麼。需要幫助修復這段代碼

任何幫助,將不勝感激。

+0

當你加減分數你不減去分母。你也需要共同的分母來執行減法。 –

+0

請修改您的標題以使其更具信息性。 – Trott

+0

舉例說明user1060350的回答:是2/2(aka。1) - 1/1(也就是1)等於1/1(還有一個)?或者是1 - 1 = 0? – flesk

回答

2

如果在對象上使用減法,則將最後一行更改爲return this。順便說一句,你的比例類型的減法是錯誤的。

+0

大聲笑,是的,我沒有真正停下來思考共同的分母。 – Jordan

+0

我更新了我的代碼以反映正確的數學,但是我在調​​用方法幾次後仍然遇到問題。有什麼建議? – Jordan

+0

你的程序工作正常,除非你沒有減少分數(例如-26/80 = -13/40) – mishadoff

0

我最終解決了自己的問題,但我很感謝大家的幫助。我知道這可能不是解決這個問題的最有效的方法,但我只是第一年的CS學生。如果任何人有任何建議來清除這個代碼,我很樂意聽到它。謝謝!

public class Number { 
private int numerator; 
private int denominator; 

public Number(int numerator, int denominator) { 
    reduce(numerator, denominator); 
} 

public Number() { 
    this.numerator = 0; 
    this.denominator = 1; 
} 

public int getDenominator() { 
    return denominator; 
} 

public int getNumerator() { 
    return numerator; 
} 

public String toString() { 
    if (numerator == 0) { 
     return "0"; 
    } else if (denominator == 1) { 
     return numerator + ""; 
    } 
    return numerator + "/" + denominator; 
} 

public Number add(RationalNumber other) { 
    int numerator1 = (numerator * other.getDenominator()) + (other.getNumerator() * denominator); 
    int denominator1 = denominator * other.getDenominator(); 

    return new Number(numerator1, denominator1); 
} 

public Number subtract(RationalNumber other) { 
    int numerator1 = (numerator * other.getDenominator()) - (other.getNumerator() * denominator); 
    int denominator1 = denominator * other.getDenominator(); 

    return new Number(numerator1, denominator1); 
} 

public Number multiply(RationalNumber other) { 
    int numerator1 = numerator * other.getNumerator(); 
    int denominator1 = denominator * other.getDenominator(); 

    return new Number(numerator1, denominator1); 
} 

public Number divide(RationalNumber other) { 
    int numerator1 = numerator * other.getDenominator(); 
    int denominator1 = denominator * other.getNumerator(); 

    return new Number(numerator1, denominator1); 
} 

private void reduce(int numerator, int denominator) { 
    int factor = 1; 
    int temp = 0; 
    if (Math.abs(numerator) > Math.abs(denominator)) { 
     temp = Math.abs(numerator); 
    } else if (Math.abs(denominator) > Math.abs(numerator)) { 
     temp = Math.abs(denominator); 
    } 
    for (int i = temp; i > 0; i --) { 
     if ((numerator %i == 0) && (denominator %i == 0)) { 
      factor = i; 
      i = 0; 
     } 
    } 
    numerator = numerator/factor; 
    denominator = denominator/factor; 
    rightForm(numerator, denominator); 
} 
private void rightForm(int numerator, int denominator) { 
    if (numerator > 0 && denominator < 0) { 
     this.numerator = numerator - numerator - numerator; 
     this.denominator = Math.abs(denominator); 
    } else if (numerator < 0 && denominator < 0) { 
     this.numerator = Math.abs(numerator); 
     this.denominator = Math.abs(denominator); 
    } else { 
     this.numerator = numerator; 
     this.denominator = denominator; 
    } 
} 

}