2011-11-26 118 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; 
    } 
} 

}