Как мне правильно создать класс Ratio add (Ratio r)?

#java

#java

Вопрос:

Для моего домашнего задания мне дали скелетный код и сказали заполнить классы, чтобы они работали должным образом, когда дело доходит до сложения, вычитания, умножения и деления дроби. Мне нужна помощь в понимании того, как именно работает Ratio r? Мой учитель сказал мне: «Он переносит значения для завершения вычисления с числителем и знаменателем «это»переносит»?

Основываясь на том, что он сказал, я чувствую, что сама моя математика верна, просто не уверен, как вернуть r?

Я пытался поиграть с коэффициентом «r», но, похоже, не могу понять, как это работает.

Способ, которым я в настоящее время установил r равным, не работает, он говорит «невозможно преобразовать из типа long в ratio»

 // class level variables
private long _numerator;
private long _denominator;

public Ratio()
{
    long _numerator = 0;
    long _denominator = 1;


}// end of Ratio()

public Ratio(long a)
{
    a = 0;
    _denominator = 1;

}// end of Ratio(long a)

public Ratio(long dividend, long divisor) throws ArithmeticException
{

    this._numerator = dividend;

    // check denominator for 0
    if (divisor == 0)
    {
        throw new ArithmeticException("Denominator cannot be zero");
    } else
        this._denominator = divisor;
    // check for negative
    if (dividend < 0 amp;amp; divisor < 0) // if there's a negative in numerator and denominator, fraction becomes
                                        // positive
    {
        dividend *= -1;
        divisor *= -1;
    } else if (divisor < 0) // if negative is in denominator, moves negative to the numerator
    {
        dividend *= -1;
        divisor *= -1;
    }

    // simplify fraction in here using gcd
    gcd(dividend, divisor);

}// end of Ratio(long dividend...)

long getNumerator()
{
    return _numerator;
}

long getDenominator()
{
    return _denominator;
}

public Ratio add(Ratio r)
{

    long num= this._numerator;
    long den = this._denominator;
    long otherDen = getDenominator();
    long otherNum = getNumerator(); 
    r = new Ratio();

    //is this the return way to do it?
    r = ((num * otherDen)   (otherNum * den)) / (den * otherDen);

    //or do i have to seperate numerator amp; denominator?
    long newNum = ((num * otherDen)   (otherNum * den));
    long newDen = (den * otherDen);

    return r();
}// end of add
  

Комментарии:

1. На самом деле, не ясно, что вам нужно. Ratio — это ваш собственный класс или из пакета Java? В чем у вас проблема? С r = new Ratio(); и после этого?

2. @Dred, я считаю, что это мой собственный класс. У меня возникли проблемы при попытке выполнить вычисления » r = ((num * otherDen) (otherNum * den)) / (den * otherDen);» и пытаюсь вернуть их в надлежащем формате

3. Кроме того, открытый класс называется » public class Ratio реализует comparable .

4. Во-первых, вы не можете вернуть return r(); только return r; также, произошло ваше исключение, потому что вы пытаетесь сделать это Ratio=((long*long) (long*long))/(long*long); , вы не можете равняться Ratio с long, это разные типы.

5. @Dred итак, что такое соотношение типов?

Ответ №1:

Как только ваш Ratio объект содержит два поля, вы должны заполнить их только что вычисленными числителем и знаменателем, а затем просто вернуть объект new Ratio(resultNumerator, resultDenominator) .

 public Ratio add(Ratio r) {
    long otherDen = getDenominator();
    long otherNum = getNumerator(); 
    long resultDenominator = this._denominator * otherDen;
    long resultNumerator = this._numerator * otherDen   otherNum * this._denominator;

    return new Ratio(resultNumerator, resultDenominator);
}