1

だから私はイントロ Java クラスのプログラムを書いています。クラス Fraction 内で 2 つの分数を加算するメソッドを定義しています。分数には、分子と分母の 2 つの変数があります。これらの各変数には、setter と getter があります。とにかく、以下に示す追加方法に問題があります。私は理にかなった方法でそれを実装しようとしましたが、メソッドの呼び出し/動作しないオブジェクトの使用で何かをしたと確信しています。

public void add(Fraction fraction1, Fraction fraction2)
{
    Fraction fraction3 = new Fraction();

    int a = fraction1.getNumerator;
    int b = fraction1.getDenominator;
    int c = fraction2.getNumerator;
    int d = fraction2.getDenominator;

    fraction3.setNumerator((a * d) + (b * c));
    fraction3.setDenominator(b * d);
}

問題がメソッド定義にあるのか、オブジェクト型をそのように使用できるのか、それとも何か問題があるのか​​ わかりません。情報を提供する必要がある場合は、できるだけ早く提供します。

編集: エラーはコンパイラ エラーで、オブジェクトが見つかりませんでした。関数呼び出しの後にかっこを忘れてしまいました。問題は解決しました。エラーの詳細を書き忘れてご迷惑をおかけして申し訳ありません。

ありがとう!

4

6 に答える 6

2

getあなたの呼び出しはメソッドであることを意図していると思います。ひょっとしてコンパイルエラーが発生していませんか?

int a = fraction1.getNumerator();
int b = fraction1.getDenominator();
int c = fraction2.getNumerator();
int d = fraction2.getDenominator();
于 2012-10-30T16:58:33.297 に答える
1

あなたのメソッドは ですvoid。つまり、答えが返されません。コードをわずかに変更すると、機能するソリューションが得られます。

public static Fraction add(Fraction fraction1, Fraction fraction2)
{
    Fraction fraction3 = new Fraction();

    int a = fraction1.getNumerator();
    int b = fraction1.getDenominator();
    int c = fraction2.getNumerator();
    int d = fraction2.getDenominator();

    fraction3.setNumerator((a * d) + (b * c));
    fraction3.setDenominator(b * d);

    return fraction3;
}

メソッドを変更staticしないのでthisに変更し、戻り値の型を からvoidに変更し、ステートメントFractionを追加したことに注意してください。新しい分数を返すため、これは非破壊的なreturn加算ではありません。このスタイルを使用したい場合は、セッターメソッドは使用されないため削除し、フィールドをfinalとして宣言し、代わりにコンストラクターを介して分子/分母を設定する必要があります。

他のオプションは、破壊的な加算操作を定義することです。つまり、上記のように新しい小数オブジェクトを返すのではなく、レシーバーが更新されます。

public void add(Fraction that)
{
    int a = this.getNumerator();
    int b = this.getDenominator();
    int c = that.getNumerator();
    int d = that.getDenominator();

    this.setNumerator((a * d) + (b * c));
    this.setDenominator(b * d);
}
于 2012-10-30T16:59:16.453 に答える
1

Yourはローカル変数です。それへのすべての参照は、メソッドが完了fraction3するとすぐに失われます。しがみつくのではなく、add戻ってみることもできます。fraction3void

于 2012-10-30T16:58:38.450 に答える
0

これは私の意見ですが、add引数を 2 つ取る場合は、メソッドを static にします。1 つの引数を取る場合は、2 番目の引数が暗黙的に であるため、静的ではありませんthis

これの理由は、非静的バージョンが 2 つの引数を取る場合、インスタンス a を使用してインスタンス b とインスタンス c を操作しているのでしょうか? あまり意味がありません。

于 2012-10-30T16:58:54.240 に答える
0

メソッドに括弧がありません...

int a = fraction1.getNumerator();
int b = fraction1.getDenominator();
int c = fraction2.getNumerator();
int d = fraction2.getDenominator();
于 2012-10-30T16:59:54.557 に答える
0

以下のように を追加してメソッドからreturn type返すだけです。fraction3

public Fraction add(Fraction fraction1, Fraction fraction2)
{
   Fraction fraction3 = new Fraction();

   int a = fraction1.getNumerator();
   int b = fraction1.getDenominator();
   int c = fraction2.getNumerator();
   int d = fraction2.getDenominator();

   fraction3.setNumerator((a * d) + (b * c));
   fraction3.setDenominator(b * d);
   return fraction3 ;
}

このメソッドを次のように使用できるようになりました。

 Fraction resultFraction = add(fraction1, fraction2);

分数 1 自体に分数 2 を追加する場合、つまり

 fraction1.add(fraction2);

次に、メソッドを次のように更新します。

public void add(Fraction fraction2)
{
   int a = this.numerator;
   int b = this.denominator;
   int c = fraction2.getNumerator();
   int d = fraction2.getDenominator();

   this.numerator = (a * d) + (b * c);
   this.denominator = (b * d);
}
于 2012-10-30T16:59:58.630 に答える