所以我正在编写一个介绍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);
}
我不知道问题是否在方法定义中,如果我可以使用那种方式的对象类型,或者是否有其他错误。任何帮助将不胜感激,如果我需要提供任何信息,我会尽快这样做。
编辑:错误是编译器错误,无法找到对象。函数调用后我忘了括号,问题解决了。很抱歉忘记详细说明我的错误。
谢谢!
答案 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.setDenominator(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);
}