【问题标题】:Trouble assigning values to an array of objects in Java, using a for loop and object methods使用for循环和对象方法为Java中的对象数组赋值时遇到问题
【发布时间】: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


【解决方案1】:

根据您发布的代码 - 但从 addHour 中删除编译错误

并修改为

    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 + 1; j++){   // changed
        a.addHour();
      }
      tstamps[i] = a;
    }

    for (int x = 0; x < 5; x++) {
        System.out.println(tstamps[x].time);
    }

我得到了输出

09:00:00
10:00:00
11:00:00
12:00:00
13:00:00

【讨论】:

  • 非常感谢,这完美!看起来我在编写问题并尝试修复我的代码时不小心创建了编译错误,我消除了大部分的混乱,使用了你的更改,现在一切正常:) 我真的很感激。
【解决方案2】:

这是另一种方法,使用您的原始代码。

Time tstamps[] = new Time[5];
Time a = new Time("09:00:00");
for (int i = 0; i < 5; i++){
  tstamps[i] = a;
  a.addHour();
  a = new Time(a.time);
}

改进建议:使Time.addHour() 返回一个新的Time,即未来一小时。这将允许您进一步简化上述内容。喜欢,

Time tstamps[] = new Time[5];
Time a = new Time("09:00:00");
for (int i = 0; i < 5; i++){
  tstamps[i] = a;
  a = a.addHour();
}

Time tstamps[] = new Time[5];
tstamps[0] = new Time("09:00:00");
for (int i = 1; i < tstamps.length; i++) {
  tstamps[i] = tstamps[i-1].addHour();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 2012-11-19
    • 2011-06-21
    相关资源
    最近更新 更多