首页 > 解决方案 > 使用for循环和对象方法为Java中的对象数组分配值时遇到问题

问题描述

在我的时间课上,我有:

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;
  }

在我的主要课程中,我有:

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;

我没有任何主要课程。

另外,如果我违反任何社区规范或类似的东西,请原谅,这是我第二次在 StackOverflow 上发帖。

标签: javaarraysfor-loopobjectmethods

解决方案


根据您发布的代码 - 但从中删除编译错误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

推荐阅读