使用toString函数返回时出现Java错误

时间:2017-11-25 11:19:32

标签: java class printing tostring

我对Java很新,到目前为止只编程了几个月。

我有两个课程,TimeSlotLabGroup

TimeSlot课程中有代码 -

private Time start;
private Time end;
private String day;

public TimeSlot(String spec) {
    //splits given string on each space
    String[] splitSpec = spec.split(" ");
    day = splitSpec[0];

    //uses the class Time, and passes in the hour and the minute of the time the lab begins.
    this.start = new Time(splitSpec[1]);

    //uses the class Time, and passes in the hour and the minute of the time the lab finishes.
    this.end = new Time(splitSpec[2]);  
}

然后在LabGroup类中有代码 -

public String charLabel;
public TimeSlot timeSpec;
public String lineTime;

public LabGroup(String line) {

    String[] lineSplit = line.split(" ");
    charLabel = lineSplit[0];

    //string a = "Day StartTime EndTime"
    String a = lineSplit[1] + " " + lineSplit[2] + " " + lineSplit[3];

    timeSpec = new TimeSlot(a);


}

以及toString方法 -

public String toString() {
    return "Group "+ charLabel + timeSpec+ "\n";

}

LabGroup的示例输入为"A Mon 13:00 15:00",然后应通过toString提供输出 -

Group A Mon 13:00 - 15:00
Group B Mon 15:00 - 17:00
Group C Tue 13:00 - 15:00
Group D Tue 15:00 - 17:00

但相反,我得到了 -

Group AlabExam1.TimeSlot@3f0fbfe5
, Group BlabExam1.TimeSlot@ea0e8b8
, Group ClabExam1.TimeSlot@25eab2ba
, Group DlabExam1.TimeSlot@37528b33

3 个答案:

答案 0 :(得分:0)

您在类LabGroup中提供了toString()方法 - 此方法有效(有一些小问题)。问题是你没有在类TimeSpec中提供方法toString()。

答案 1 :(得分:0)


当你执行return "Group "+ charLabel + timeSpec+ "\n";时,你告诉程序将对象timeSpec作为字符串返回。
所以基本上它会调用你的TimeSlot toString函数,它返回你的TimeSlot@3f0fbfe5({{3} })。 你需要做的是ClassName@HashCode TimeSlot的toString,这样当它被调用时,它会以你选择的格式给出一个字符串。 希望它有所帮助。

答案 2 :(得分:0)

您需要覆盖toString方法,因为如果您打印charLabel,则只需调用toString类中的Object方法,该方法返回return getClass().getName() + "@" + Integer.toHexString(hashCode());

因此,您需要执行以下任一操作:

1)在toString中实施TimeSlot方法,如下所示:

public String toString() {
    return day + " " + start + " - " + end;
}

2)通过在LabGroup

中引入getter方法,修改如下所示的toString TimeSlot方法
public String toString() {
    return "Group " + charLabel.getDay() + " " + charLabel.getStart() + " - " + charLabel.getEnd();

}