Возникли проблемы с манипулированием объектами для простых операций с двумя дробями - PullRequest
0 голосов
/ 17 февраля 2019

Я создаю код, который хочу протестировать, используя тестирование 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...