Как можно додавать объекты запоминая их значения в цикле
Всем привет, у меня в следующем проблема. Я имею объект czas1 класса Czas. И еще один обьект czas2. У меня есть метод dodaj(), который правильно работает, и если я пишу czas1.dodaj(czas2), то у меня суммируются эти два обьекта и все класно!
Но что если у меня есть массив из обьектов, например, Czas[] czas = {czas1, czas2, czas3, czas4} и я пытаюсь в методе sumuj() все эти объекты друг к другу прибавить. Но проблема в том, что каждый раз когда в цикле в методе sumuj() я пишу czas = tab[i].dodaj(tab[i]), то обьект czas у меня не запоминается. И получается так, что в результате я получаю сумму двух последних объектов.
Может кто-то знает как это исправить? Буду рад за подсказки!
Вот код:
public class Main {
public static void main(String[] args) {
Czas czas1 = new Czas(1, 10);
Czas czas2 = new Czas(2, 10);
Czas czas3 = new Czas(3, 10);
Czas czas4 = new Czas(4, 10);
Czas[] czas = {czas1, czas2, czas3, czas4};
System.out.print(Czas.sumuj(czas));
}
}
public class Czas {
private int godz;
private int minuty;
public Czas(int godz, int minuty) {
this.godz = godz;
this.minuty = minuty;
}
public int getGodz() {
return godz;
}
public int getMinuty() {
return minuty;
}
public Czas dodaj(Czas czas) {
minuty = minuty + czas.getMinuty();
int temp = minuty / 60;
godz = godz + czas.getGodz() + temp;
int temp2 = minuty % 60;
minuty = temp2;
return new Czas(godz,minuty);
}
static Czas sumuj(Czas[] tab) {
Czas czas = new Czas(0,0);
for (int i = 0; i < tab.length - 1; i++) {
czas = tab[i].dodaj(tab[i + 1]);
}
return new Czas(czas.godz, czas.minuty);
}
}
Ответы (2 шт):
Создаем новый объект czas и к нему додаем все элементы из массива:
static Czas sumuj(Czas[] tab) {
final Czas czas = new Czas(0, 0);
for (int i = 0; i < tab.length; i++) {
czas.dodaj(tab[i]);
}
return czas;
}
Можно еще проще:
static Czas sumuj(Czas[] tab) {
final Czas czas = new Czas(0, 0);
for (Czas t : tab) {
czas.dodaj(t);
}
return czas;
}
К этому коду тонна замечаний. Может лучше сделать так:
import java.util.Arrays;
public class Time {
private final int hours;
private final int minutes;
public Time(int hours, int minutes) {
this.hours = hours;
this.minutes = minutes;
}
public int getHours() {
return hours;
}
public int getMinutes() {
return minutes;
}
@Override
public String toString() {
return "Time{" + "hours=" + hours + ", minutes=" + minutes + '}';
}
static Time sumOf (Time ... tab) {
int totalMinutes = Arrays.stream(tab).mapToInt(var->var.getHours()*60+var.getMinutes()).sum();
return new Time(totalMinutes/60, totalMinutes%60);
}
public static void main(String[] args) {
Time time1 = new Time(1, 10);
Time time2 = new Time(2, 10);
Time time3 = new Time(3, 10);
Time time4 = new Time(4, 10);
System.out.print(Time.sumOf(time1, time2, time3, time4));
}
}