有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在使用两个分数操作简单操作对象时遇到问题

我正在创建一个要使用jUnit测试的代码。我想做两个分数之间的基本运算,比如加法、减法、乘法和除法。我在处理对象时遇到问题,我总是返回我开始使用的内容,而不是预期的结果

我目前正在使用一个快速的main方法进行测试。我的toString方法工作得很好,我的构造函数方法也很好。我只是操作方法有问题。它永远不会把我的目标变成正确的答案

举个例子,它应该打印出“分子是2,分母是3”。我只是一直拿1和3取而代之

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

    /*
    *   Sets default values for numerator & denominator */
    public FractionalNumber(){
        numerator = 1;
        denominator = 1;
    }

    /*
    Precondition: denominator cannot be 0
    @param num      the numerator of the fraction
    @param denom    the denominator of the fraction, may not be 0 */
    public FractionalNumber(int num, int denom){
        this.numerator = num;
        if(denom != 0)
            this.denominator = denom;
        else
            throw new IllegalArgumentException("Denominator cannot be 0.");
    }

    /*
    *   Adjusts the sign of the numerator and denominator so the
    *   denominator is positive, if necessary */
    private void normalize(){
      if((denominator < 0 && numerator < 0) || denominator < 0){
         denominator *= -1;
         numerator *= -1;
      }
    }

    /*
    *   Adds the paramter to this fractional number
    *   Precondition: this and otherNum are valid FractionalNumbers
    *   Postcondition: this is the sum of the two fractions
    *   Class Invariant: otherNum is not changed
    *   @param  otherNum    a FractionalNumber*/
    public void add(final FractionalNumber otherNum){
         FractionalNumber num1 = new FractionalNumber();
         FractionalNumber num2 = otherNum;
         num1.numerator = num1.numerator * num2.denominator + num2.numerator * num1.denominator;
         num1.denominator = num1.denominator * num2.denominator;
         FractionalNumber sum = new FractionalNumber();
         sum.numerator = num1.numerator;
         sum.denominator = num1.denominator;
    }

    public void subtract(final FractionalNumber otherNum){
         FractionalNumber num1 = new FractionalNumber();
         num1.numerator = num1.numerator * otherNum.denominator - otherNum.numerator * num1.denominator;
         num1.denominator = num1.denominator * otherNum.denominator;
         num1.normalize();
    }

    public void multiply(final FractionalNumber otherNum){
         FractionalNumber num1 = new FractionalNumber();
         num1.numerator = num1.numerator * otherNum.numerator;
         num1.denominator = num1.denominator * otherNum.denominator;
         num1.normalize();
    }

    public void divide(final FractionalNumber otherNum){
         if (otherNum.numerator == 0 || otherNum.denominator == 0){
            FractionalNumber num1 = new FractionalNumber();
            num1.numerator = num1.numerator * otherNum.denominator;
            num1.denominator = num1.denominator * otherNum.numerator;
            num1.normalize();
         }
    }

    public int getNumerator(){
        return numerator;
    }

    public int getDenominator(){
        return denominator;
    }

    public void setNumerator(int num){
      numerator = num;
    }

    public void setDenominator(int denom){
      denominator = denom;
    }

    /*
    *   @return     true if this fraction and other would reduce to the
    *               same numerator and denominator, false otherwise
    *   @param      other       a FractionalNumber  */
    @Override
    public boolean equals(Object other){
        if (this == other) return true;
        if (other == null) return false;
        if(!(other instanceof FractionalNumber)) return false;
        FractionalNumber otherNum = (FractionalNumber) other;
        return numerator * otherNum.getDenominator() == otherNum.getNumerator() * denominator;    
    }

    @Override
    public String toString(){
        String number = "numerator is " + numerator + " and denominator is " + denominator;
        return number;
    }
    public static void main(String[] args){
      FractionalNumber num = new FractionalNumber(1, 3);
      FractionalNumber num1 = new FractionalNumber(1, 3);
      num.add(num1);
      System.out.println(num);
    }
}

共 (0) 个答案