1

この質問は最後の方法に対するものです。メソッド「public static Rational convert(double d)」で d を返すたびに、double から 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;  
}
4

1 に答える 1

1

あなたの while ループはおそらく終わらないでしょう。分母の値を変更することはありません。

さて、方法ですがpublic static Rational convert(double d)

double を返していますが、Java は d を Rational にしたいことをどのように認識していますか?

そうではありません。

そのメソッドでは、以下に近いリターンを行う必要があります。

Rational converted = new Rational(numerator, denominator);
return converted;

ただし、その前に、メソッドで両方を初期化する必要があります。

ここでは、やるべきことがたくさんあります。

  1. メソッドにa を渡しdouble d、値を使用せずに上書きします。
  2. while(denominator != 0)分母の値を決して変更しないため、無限ループが発生します。
  3. このメソッドは次のように呼び出されると仮定します。メソッドRational rational = Rational.convert(someDouble);内で分子と分母を宣言し、次のようなものを返すことを検討する必要がありますnew Rational(num,dem);
于 2014-04-01T03:30:17.877 に答える