Проблемы с присвоением значений массиву объектов в Java, используя для l oop и методы объекта - PullRequest
0 голосов
/ 23 апреля 2020

В моем классе Время у меня есть:

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

Я пытался поиграться с кодом в своем основном классе, но я очень новичок, пожалуйста, помогите мне понять мою ошибку и как ее исправить. ..

Редактировать:

Извините, я до сих пор не совсем понимаю, как это сделать ...

Я пытался последовать вашему совету и сделал это:

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.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2020

Вот еще один подход, использующий ваш оригинальный код.

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();
}
0 голосов
/ 23 апреля 2020

На основе вашего опубликованного кода - но устранение ошибки компиляции из 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
...