1

所以我正在编写一个介绍 Java 类的程序。我正在定义一种方法来在类 Fraction 中将两个分数相加。分数有 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

fraction3是一个局部变量,一旦add方法完成,所有对它的引用都会丢失。你可以尝试返回fraction3而不是void为了坚持下去。

于 2012-10-30T16:58:38.450 回答
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,将返回类型从更改voidFraction,并添加了一条return语句。并不是说这是一个非破坏性的添加,因为它返回一个新的分数。如果您想使用这种风格,那么您可能应该摆脱setter方法,因为它们不会被使用,并将字段声明为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 回答
0

这只是我的观点,但如果您要add接受两个参数,请将方法设为静态。如果你要让它接受一个参数,它不会是静态的,因为第二个参数是隐式的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);

如果你想在 fraction1 本身中添加 fraction2 即

 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 回答