【发布时间】:2020-08-06 05:35:26
【问题描述】:
在我的 Time 课程中,我有:
public Time(String start_time)
{
time = start_time;
hrs = Integer.parseInt(time.substring(0, 2));
mins = Integer.parseInt(time.substring(3, 5));
secs = Integer.parseInt(time.substring(6, 8));
}
和
public void addHour()
{
hrs = hrs + 1;
}
if (hrs > 23) {
hrs = hrs - 24;
}
prntsecs = String.valueOf(secs);
prntmins = String.valueOf(mins);
prnthrs = String.valueOf(hrs);
if (secs < 10) {
prntsecs = "0" + String.valueOf(secs);
}
if (mins < 10) {
prntmins = "0" + String.valueOf(mins);
}
if (hrs < 10) {
prnthrs = "0" + String.valueOf(hrs);
}
time = prnthrs + ":" + prntmins + ":" + prntsecs;
}
在我的 Main 类中,我有:
Time tstamps[] = new Time[5];
Time a = new Time("09:00:00");
for (int i = 0; i < 5; i++){
tstamps[i] = a;
a.addHour();
}
tstamps[0].printTime();
tstamps[1].printTime();
tstamps[2].printTime();
tstamps[3].printTime();
tstamps[4].printTime();
我希望它打印出来:
09:00:00
10:00:00
11:00:00
12:00:00
13:00:00
但它会打印:
14:00:00
14:00:00
14:00:00
14:00:00
14:00:00
我尝试在我的 Main 类中弄乱代码,但我是个初学者,请帮助我理解我的错误以及如何解决它...
编辑:
对不起,我还是不太明白如何做到这一点......
我试着听从你的建议并这样做了:
Time tstamps[] = new Time[5];
for (int i = 0; i < 5; i++){
Time a = new Time("09:00:00");
for (int j = 1; j < i; j++){
a.addHour();
}
tstamps[i] = a;
}
但现在它只打印了五次 09:00:00,而不是 14:00:00。
我对 Time 类的字段定义:
public String time;
public String prntsecs;
public String prntmins;
public String prnthrs;
public int hrs;
public int mins;
public int secs;
我没有 Main 类。
另外,如果我违反任何社区规范或类似情况,请原谅,这是我第二次在 StackOverflow 上发帖。
【问题讨论】:
-
你一直在往外的盒子里添加同一个对象,你需要一个新的对象
-
您每次都使用相同的对象
tstamps[i] = a;- 为循环的每次迭代创建一个新对象。 -
我假设这是一个课堂作业 - 我会指出
addHour永远不需要调整除小时之外的任何值 - 秒或分钟将如何变化 在addHour?)。最后,Java 在java.time包中有LocalTime(这是您应该在实际项目中使用的)。以及 多个 其他用于表示时间的类(例如用于表示时间的类太多)。 -
@ScaryWombat 嘿,谢谢你的帮助,但不幸的是仍然不太明白如何做到这一点。我完全没能用代码写出清晰的评论,所以我将它包含在我帖子底部的编辑中。
-
@ElliottFrisch 是的,非常感谢您的评论,我修复了 'addHour' 和其他具有相同问题的方法。我会坚持使用我为此创建的时间系统,但下次我一定会检查这些东西是否已经存在。
标签: java arrays for-loop object methods