Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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 当您有两个构造函数时重写toString()_Java_Tostring - Fatal编程技术网

Java 当您有两个构造函数时重写toString()

Java 当您有两个构造函数时重写toString(),java,tostring,Java,Tostring,我当前的类,seriescuitclass包含两个构造函数: public SeriesCircuit(Circuit input1, Circuit input2) { this.circuit1 = input1; this.circuit2 = input2; } public SeriesCircuit(ParallelCircuit parallelCircuit, Circuit circuit1) { this.parallelCircuit = para

我当前的类,
seriescuit
class包含两个构造函数:

public SeriesCircuit(Circuit input1, Circuit input2)
{
    this.circuit1 = input1;
    this.circuit2 = input2;
}

public SeriesCircuit(ParallelCircuit parallelCircuit, Circuit circuit1)
{
    this.parallelCircuit = parallelCircuit;
    this.circuit1 = circuit1;
}
使用
.toString()
方法,我可以打印出第一个构造函数的值,如下所示:

public String toString()
{
    return circuit1.getResistance() + " + " + circuit2.getResistance();
}
注意:
.getResistance()
get返回的值只是两倍,因此示例输出类似于以下字符串:
2.0+3.0

我的问题是,既然我有两个构造函数,它们提供两种不同的输入类型,我如何只重写一个
.toString()
来输出两种不同类型的构造函数输入

例如,在我的主要工作中,我这样做:

系列电路s1=新系列电路(新电路(2.0)、新电路(3.0))

串联电路s2=新串联电路(新并联电路(s1,新电路(4.0)),新电路(1.0))


我可以使用
System.out.println(s1)
打印出
s1
,但由于我从未为第二个构造函数指定
.toString()
条件,因此我期望得到一个
NullPointerException

构造您的
toString()
关于不基于构造函数的实例字段和它必须是一些描述性和简短的

如果需要,则可以对值使用布尔标志或非空检查,否则将在输出中获得
null

使用或附加字符串值


编辑 值得一读


无论您有哪些构造函数,
toString()
都应该反映对象的状态,不多也不少。通常,从
toString()
返回的字符串将显示对象字段的状态,如果一些字段为null,则也应显示该字段


我主要使用
toString()
进行调试,再次显示程序运行时对象的状态。它实际上不应该用于生产输出,这就是为什么我认为您的问题不是问题。

您可以设置一个布尔变量,该变量对于一个构造函数为true,对于另一个构造函数为false。在toString中,您只需对该变量执行if-else,并以这种方式执行两个不同的输出。

首先检查属性
parallelcuit
是否已初始化(如果属性
null
):


我明白你的意思。假设一个实例变量为null,我们知道使用了一个构造函数?建议更改为
parallelcuit==null
,而不是
!=null
,因为如果
并联电路
null
,则表示使用了构造函数1。这是一个家庭作业,向我们展示了如何重写
.toString()
方法:)。
public String toString() {
    if(parallelCircuit == null) {
        return circuit1.getResistance() + " + " + circuit2.getResistance();
    }
    else {
        return parallelCircuit.getResistance() + " + " + circuit1.getResistance();
    }
}