重载 toString 方法
Overload a toString Method
我正在尝试为具有多个构造函数的 class 编写一个 toString 方法:
public Fraction(int n1, int d1, int n2, int d2)
{
num1=n1;
den1=d1;
num2=n2;
den2=d2;
}
和
public Fraction(int nAns, int dAns)
{
nAnswer=nAns;
dAnswer=dAns;
}
但是,当我尝试编写一个 toString 时,我总是遇到编译错误(可能是因为这两个方法都被称为 toString):
public String toString()
{
return "Fraction[numerator1="+num1+", numerator2="+num2+", denominator1="+den1+", denominator2="+den2+"]";
}
public String toString()
{
return "Fraction[nAnswer="+nAnswer+", dAnswer="+dAnswer+"]";
}
如果我将其中一个 toString 方法命名为 toString 并将另一个方法命名为 toString2,程序会编译但不会为我提供所需的 toString2 输出。
然后我尝试为这个方法编写一个 if 语句,但我不确定我将如何编写 if 部分(我怎么说 "If your fraction looks like the first constructor, return the first toString; if your fraction looks like the second constructor, return the second toString"?)。
我尝试了以下方法,但我知道 if 部分是错误的,因为我不断收到编译错误:
if Fraction==Fraction(int num1, int den1, int num1, int den2)
{
public String toString()
{
return "Fraction[numerator1="+num1+", numerator2="+num2+", denominator1="+den1+", denominator2="+den2+"]";
}
else if Fraction==Fraction(int nAnswer, int dAnswer)
{
public String toString()
{
return "Fraction[nAnswer="+nAnswer+", dAnswer="+dAnswer+"]";
}
}
但我知道可以重载 toString 方法,因为 Java 库中的许多 class 都在使用它(例如,矩形 class)。
有什么建议吗?提前致谢!
首先,toString
方法来自对象 class,不要尝试制作多个这些方法或类似的东西,将所有内容都放在一个方法中。至于你的问题,你可以为你的class创建一个变量String description
,并在构造函数中初始化它,然后在toString
中只return那个变量。如果您在创建对象后没有以任何其他方式更改对象,则可以这样做,但情况可能并非如此。您还可以创建两个布尔变量 createdByFirstConstructor
和 createdBySecondConstructor
并将它们初始化为 false。然后在两个构造函数中将相应的变量更改为 true
,然后在 toString
中检查哪个变量设置为 true 并相应地打印。希望这可以帮助。可能有更简单的解决方案,但我现在还没有想到,也许以后再考虑。
private boolean createdByFirst = false;
private boolean createdBySecond = false;
public Fraction(yourCode){
createdByFirst = true;
}
public Fraction(yourOtherCode){
createdBySecond = true;
}
public String toString(){
if(createdByFirst)
return "yourStringForFirstConstructor";
else if(createdBySecond)
return "yourStringForSecondConstructor";
else
return "Something else";
}
当你的老师告诉你尝试看看如何为两种不同的分数建模时,他们并不是要尝试将两种实现都塞进同一个 class 中,使用两个构造函数和两个完全不相关的集合的成员变量。这与飞行烤面包机一样有意义。
你的老师要你证明你理解如何创建一个基础 Fraction
class 它定义了一个没有任何实现的分数的接口,然后写两个 subclass es,(查找 extends
关键字,)一个以一种方式计算分数,另一个以不同的方式计算分数。每个subclass都会有自己的构造函数,自己的一组成员变量,当然还有自己的toString()
方法,所以一切都会好起来的。
我正在尝试为具有多个构造函数的 class 编写一个 toString 方法:
public Fraction(int n1, int d1, int n2, int d2)
{
num1=n1;
den1=d1;
num2=n2;
den2=d2;
}
和
public Fraction(int nAns, int dAns)
{
nAnswer=nAns;
dAnswer=dAns;
}
但是,当我尝试编写一个 toString 时,我总是遇到编译错误(可能是因为这两个方法都被称为 toString):
public String toString()
{
return "Fraction[numerator1="+num1+", numerator2="+num2+", denominator1="+den1+", denominator2="+den2+"]";
}
public String toString()
{
return "Fraction[nAnswer="+nAnswer+", dAnswer="+dAnswer+"]";
}
如果我将其中一个 toString 方法命名为 toString 并将另一个方法命名为 toString2,程序会编译但不会为我提供所需的 toString2 输出。
然后我尝试为这个方法编写一个 if 语句,但我不确定我将如何编写 if 部分(我怎么说 "If your fraction looks like the first constructor, return the first toString; if your fraction looks like the second constructor, return the second toString"?)。
我尝试了以下方法,但我知道 if 部分是错误的,因为我不断收到编译错误:
if Fraction==Fraction(int num1, int den1, int num1, int den2)
{
public String toString()
{
return "Fraction[numerator1="+num1+", numerator2="+num2+", denominator1="+den1+", denominator2="+den2+"]";
}
else if Fraction==Fraction(int nAnswer, int dAnswer)
{
public String toString()
{
return "Fraction[nAnswer="+nAnswer+", dAnswer="+dAnswer+"]";
}
}
但我知道可以重载 toString 方法,因为 Java 库中的许多 class 都在使用它(例如,矩形 class)。
有什么建议吗?提前致谢!
首先,toString
方法来自对象 class,不要尝试制作多个这些方法或类似的东西,将所有内容都放在一个方法中。至于你的问题,你可以为你的class创建一个变量String description
,并在构造函数中初始化它,然后在toString
中只return那个变量。如果您在创建对象后没有以任何其他方式更改对象,则可以这样做,但情况可能并非如此。您还可以创建两个布尔变量 createdByFirstConstructor
和 createdBySecondConstructor
并将它们初始化为 false。然后在两个构造函数中将相应的变量更改为 true
,然后在 toString
中检查哪个变量设置为 true 并相应地打印。希望这可以帮助。可能有更简单的解决方案,但我现在还没有想到,也许以后再考虑。
private boolean createdByFirst = false;
private boolean createdBySecond = false;
public Fraction(yourCode){
createdByFirst = true;
}
public Fraction(yourOtherCode){
createdBySecond = true;
}
public String toString(){
if(createdByFirst)
return "yourStringForFirstConstructor";
else if(createdBySecond)
return "yourStringForSecondConstructor";
else
return "Something else";
}
当你的老师告诉你尝试看看如何为两种不同的分数建模时,他们并不是要尝试将两种实现都塞进同一个 class 中,使用两个构造函数和两个完全不相关的集合的成员变量。这与飞行烤面包机一样有意义。
你的老师要你证明你理解如何创建一个基础 Fraction
class 它定义了一个没有任何实现的分数的接口,然后写两个 subclass es,(查找 extends
关键字,)一个以一种方式计算分数,另一个以不同的方式计算分数。每个subclass都会有自己的构造函数,自己的一组成员变量,当然还有自己的toString()
方法,所以一切都会好起来的。