【问题标题】:How iterate through a set and add together the results each time?如何遍历一组并将每次结果相加?
【发布时间】:2019-05-09 09:42:18
【问题描述】:

我试图遍历一组事件并获取每个事件的开始和结束时间并计算每个事件的持续时间。然后我需要将所有持续时间加在一起以获得总时间。我正在使用的代码只是获取最后一个事件的持续时间,而不是将它们全部加在一起。我不太确定我使用的循环是否正确?

Set<Event> events = eventService.findByUsers(user);
Long duration = null;

for(Event event : events)
{
    LocalTime startTime = event.getStart().toLocalTime();
    LocalTime endTime = event.getEnd().toLocalTime();

    duration = Duration.between(startTime, endTime).toHours();
    System.out.println("The time bewtween shifts is " + duration);

   Long totalTime = duration += duration;

}

任何帮助将不胜感激

【问题讨论】:

  • 请不要用空值初始化数字。使用原语“long”并使用默认初始化,如“long duration;”。

标签: java arrays for-loop set


【解决方案1】:

totalTime变量的声明移到循环外:

Set<Event> events = eventService.findByUsers(user);
long totalTime = 0;
for(Event event : events)
{
   LocalTime startTime = event.getStart().toLocalTime();
   LocalTime endTime = event.getEnd().toLocalTime();

   long duration = Duration.between(startTime, endTime).toHours();
   System.out.println("The time bewtween shifts is " + duration);

   totalTime += duration;
}

使用您当前的方法,每次迭代都会再次初始化 totalTime 变量,因此最后只包含最后一个持续时间。

【讨论】:

  • 您可以使用long 而不是Long,但最后一行看起来不正确。
  • totalTime = totalTime += duration 应该是 totalTime += duration 不需要重复分配
  • this 和 OP 不应将“duration”初始化为 null。实际上写的是“长持续时间”;或“长总时间;”就足够了,因为 long 的默认初始化值是 '0'
  • 我猜这是见仁见智。出于多种原因,我不喜欢(原始)变量的默认初始化(例如,对于可能不知道所有默认值的新 Java 程序员的可读性)。 Oracle 调用也依赖于这些默认值 generally bad programming style
猜你喜欢
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多