#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);
}