Рациональное удвоение и GCF
Этот вопрос к последнему методу. Всякий раз, когда я возвращаю d в методе "public static Rational convert(double d)", он говорит, что он не может конвертировать из double в Rational. Как сделать так, чтобы я мог возвращать число Rational из метода, не переключая "Rational" на double или параметр? И вот как я мог бы реализовать цикл для нахождения GCF в методе, не создавая другой метод?
public class Rational
{
// The state of a rational number is just the numerator and denominator.
private static int numerator;
private static int denominator;
// When created, a Rational's numerator and denominator are set.
public Rational( int num, int den )
{
numerator = num;
denominator = den;
}
// Accessor method for the numerator
public int getNumerator( )
{
return numerator;
}
// Accessor method for the denominator
public int getDenominator( )
{
return denominator;
}
// A mutator method which doubles the given rational number by doubling the
// numerator.
public void doubleNumber( )
{
numerator *= 2;
}
// A method which returns the common denominator between the current and
// given rational. Specifically, returns the denominator multiplied by the
// denominator of the given rational number.
public int findCommonDenominator( Rational r )
{
return denominator * r.getDenominator( );
}
//Method returning the decimal value of the fraction.
public static double convert(Rational r)
{
return (double) numerator / (double) denominator;
}
//Method returning the smallest fraction possible from a decimal given.
public static Rational convert(double d)
{
d = (Math.floor(d * 100)/100);
while ( denominator != 0)
{
d = (double) (numerator % denominator);
numerator = denominator;
d = (double) (denominator);
}
return d;
}
1 ответ
Ваш цикл while, вероятно, никогда не закончится. Вы никогда не меняете значение знаменателя.
Теперь для метода public static Rational convert(double d)
Вы возвращаете двойное число. Откуда Java знает, что вы хотите, чтобы d был Rational?
Это не так.
В этом методе вы должны делать возврат ближе к:
Rational converted = new Rational(numerator, denominator);
return converted;
Но прежде чем сделать это, вы должны инициализировать оба метода.
У вас много работы здесь.
- Вы передаете
double d
к методу, затем не используйте значение, просто перезапишите его. - У вас есть бесконечный цикл
while(denominator != 0)
потому что вы никогда не меняете значение знаменателей. - Я предполагаю, что этот метод будет называться
Rational rational = Rational.convert(someDouble);
Поэтому вы должны рассмотреть возможность объявления числителя и знаменателя внутри метода и возвращать что-то вродеnew Rational(num,dem);