【问题标题】:iterating loops comparing the current index with the next index java迭代循环比较当前索引和下一个索引java
【发布时间】:2020-08-12 15:02:03
【问题描述】:

这是我的代码

String endDate;
int currentIndex = 0;
int nextIndex = currentIndex + 1;
while(currentIndex < aList.size() - 1)
{
    endDate = aList.get(nextIndex).getStartDate();
    if(endDate == null)
    {
        endDate = episodeEnd.toString();
    }
    aList.get(currentIndex).setEndDate(endDate);
    currentIndex++;
    nextIndex++
}

aList 看起来像这样:

[itemA, 2019-09-18, 2019-11-13],
[itemB, 2019-11-13, 2019-12-19],
[itemC, 2019-12-19, null]

itemC 结束日期将始终为空,因为没有 itemD。

代码的重点是使每一项的结束日期与下一项的开始日期相同。如果没有下一项,则结束日期应该是代码 I.E. 中其他地方定义的单独时间段的结束日期。剧集结束

我遇到的问题是正确地迭代列表。

循环永远不会结束,因为我需要将最后一个索引设置为 aList.size() - 1 以防止 indexOutOfRange。由于它永远不会到达末尾,因此 itemC 永远不会被检查,因此 itemC 的结束日期保持为空。

我的另一个想法是使用嵌套 for 循环,外部循环查看 currentIndex,嵌套循环查看

如何编写代码以便检查 itemC 并避免 indexOutOfRange?

【问题讨论】:

  • endDate = episodeEnd.toString(); ... 小写 e 表示endDate ?
  • 对不起...错字:-)。我已经编辑了代码
  • 如果总是设置开始日期,那为什么还要修改itemC呢?如果它是endDate 应该保持null,那么这段代码已经可以工作了。
  • 结束日期不应保持为空。结束日期应该是下一个项目的开始日期,或者在 itemC 的情况下是不同时间段的结束日期
  • 最简单的方法是在循环外的下一条语句中设置 itemC 的结束日期,例如 aList.get(nextIndex).setEndDate(endDate)。如果您想在循环中执行此操作,请引入一个 if 语句来检查 currentIndex == aList.size() 的值并将其设置在其中,并让其他所有内容在此 if 语句的 else 子句中运行。

标签: java loops for-loop while-loop iteration


【解决方案1】:

变量currentIndex 将等于aList.size() - 1 从而引用列表中的最后一个元素,因此您可以在循环之后设置它的endDate

while (currentIndex < aList.size() - 1) {
// ...
}
aList.get(currentIndex).setEndDate(episodeEnd.toString());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 2020-01-23
    相关资源
    最近更新 更多