Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在同一类中的方法定义内调用类方法_Java - Fatal编程技术网

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

Java 在同一类中的方法定义内调用类方法,java,Java,所以我正在为一个intro Java类编写一个程序。我正在定义一个方法,将类分数中的两个分数相加。分数有两个变量,分子和分母。每个变量都有一个setter和一个getter。无论如何,我的加法有一个问题,如下所示。我只是尝试用一种有意义的方式来实现它,但我确信我在调用方法/使用不起作用的对象方面做了一些事情 public void add(Fraction fraction1, Fraction fraction2) { Fraction fraction3 = new Fraction

所以我正在为一个intro Java类编写一个程序。我正在定义一个方法,将类分数中的两个分数相加。分数有两个变量,分子和分母。每个变量都有一个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);
}
我不知道问题是否出在方法定义中,是否可以这样使用对象类型,或者是否还有其他问题。任何帮助都将不胜感激,如果我需要提供任何信息,我会尽快提供

编辑:错误是编译器错误,找不到对象。函数调用后我忘记了括号,问题解决了。很抱歉给您带来不便,忘了详述我的错误


谢谢

我想你的
get
调用应该是方法。您是否碰巧遇到编译错误

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

我想你的
get
调用应该是方法。您是否碰巧遇到编译错误

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

您的
fraction3
是一个局部变量,一旦
add
方法完成,对它的所有引用都将丢失。您可以尝试返回
fraction3
而不是
void
,以保留它。

您的
fraction3
是一个局部变量,一旦
add
方法完成,对它的所有引用都将丢失。您可以尝试返回
fraction3
,而不是
void
,以便保留它。

这只是我的观点,但是如果您要让
添加
接受两个参数,请将该方法设为静态。如果要让它接受一个参数,它将不是静态的,因为第二个参数隐式地
this


其原因是,如果非静态版本采用2个参数,那么您使用实例a对实例b和实例c进行操作?我觉得这没什么意义

这只是我的观点,但是如果你想让
add
接受两个参数,那么就让方法保持静态。如果要让它接受一个参数,它将不是静态的,因为第二个参数隐式地
this


其原因是,如果非静态版本采用2个参数,那么您使用实例a对实例b和实例c进行操作?我觉得这没什么意义

您的方法是
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;
}
请注意,我将该方法更改为
静态
,因为它没有修改
,将返回类型从
无效
更改为
分数
,并添加了
返回
语句。这并不是一个非破坏性的加法,因为它返回一个新的分数。如果您想使用这种样式,那么您可能应该摆脱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);
}

您的方法是
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;
}
请注意,我将该方法更改为
静态
,因为它没有修改
,将返回类型从
无效
更改为
分数
,并添加了
返回
语句。这并不是一个非破坏性的加法,因为它返回一个新的分数。如果您想使用这种样式,那么您可能应该摆脱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);
}

方法中缺少括号

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

方法中缺少括号

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

只需按如下方法添加
返回类型
和返回
分型3

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

只需按如下方法添加
返回类型
和返回
分型3

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

是什么让你觉得有什么不对劲?指出您认为存在问题的原因将帮助人们知道如何回答。欢迎使用StackOverflow!在发布问题时,如果您告诉我们您收到了什么错误,它将帮助我们。是否存在编译器错误?代码是否引发异常?您是否获得了意外的输出?通过向我们提供更多细节,我们可以更快地帮助您解决问题。是什么让您认为有问题?指出您认为存在问题的原因将帮助人们知道如何回答。欢迎使用StackOverflow!在发布问题时,如果您告诉我们您收到了什么错误,它将帮助我们。是否存在编译器错误?代码是否引发异常?您是否获得了意外的输出?通过提供更多详细信息,我们可以更快地帮助您解决问题。就这样,谢谢!忘了这一点我觉得有点傻,但我想这就是学习语言的意义所在P就这样,谢谢!忘了这一点我觉得有点傻,但我想这就是学习语言的意义所在P