我对Java很新,到目前为止只编程了几个月。
我有两个课程,TimeSlot
和LabGroup
。
在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
答案 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
toString
TimeSlot
方法
public String toString() {
return "Group " + charLabel.getDay() + " " + charLabel.getStart() + " - " + charLabel.getEnd();
}