在同一个类的方法定义中调用类方法

时间:2012-10-30 16:55:12

标签: java

所以我正在编写一个介绍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);
}

我不知道问题是否在方法定义中,如果我可以使用那种方式的对象类型,或者是否有其他错误。任何帮助将不胜感激,如果我需要提供任何信息,我会尽快这样做。

编辑:错误是编译器错误,无法找到对象。函数调用后我忘了括号,问题解决了。很抱歉忘记详细说明我的错误。

谢谢!

6 个答案:

答案 0 :(得分:2)

我猜你的get来电是方法。你是否有任何机会得到编译错误。

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

答案 1 :(得分:1)

fraction3是一个局部变量,只要add方法完成,对它的所有引用都会丢失。您可以尝试返回fraction3而不是void,以便继续使用它。

答案 2 :(得分: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 1}}陈述。并非这是非破坏性添加,因为它返回一个新的分数。如果你想使用这种风格,那么你可能只是摆脱 setter 方法,因为它们不会被使用,并将字段声明为 final ,设置分子/ denominator通过构造函数代替。

您的另一个选择是定义破坏性添加操作,这意味着接收器更新而不是返回新的分数对象你在上面做。

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

答案 3 :(得分:0)

这只是我的意见,但如果您要让add取两个参数,请将该方法设为静态。如果你打算让它接受一个参数,它就不会是静态的,因为第二个参数是隐含的this

这样做的原因是,如果非静态版本需要2个参数,那么您使用实例a来操作实例b和实例c?恕我直言,没有多大意义。

答案 4 :(得分:0)

您的方法中缺少

括号......

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

答案 5 :(得分: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);
}