为什么我不能在循环条件下使用数学(减法)



我有两个字符串列表,listAlistBlistA更长,我想通过向其添加空字符串来使listB相同。

这有效:

int diff = listA.size() - listB.size()
for (int i = 0; i < diff; i++) {
    listB.add("");
}

但这不是:

for (int i = 0; i < (listA.size() - listB.size()); i++) {
    listB.add("");
}

为什么?

第一个示例变量 diff constant ,而第二个示例在循环的每个迭代中评估条件列表的大小将改变为什么两个代码片段都不做同一件事。

我建议您采用第一种方法,即提前缓存limop条件的限制,而不是在每次迭代期间重新评估它。

当您向listB添加新值时,大小将被递增,因此在每个环中,您的for for for for for for listB的大小以查找条件是否为 false,以停止环形。在这种情况下,条件将永远为true,因为您将新元素添加到列表

列表的大小每次列表的大小为add(")称为

所有内容(listB.size() - listB.size())每次通过迭代是计算列表的新尺寸我。e ListB获得了一个新尺寸。

来自摘要diff ==您要添加项目的剩余大小

选项1将做。

其他答案已经解释了为什么您的第二个循环不起作用。

我想提出一种替代方法,通过使用Collections.nCopiesList.addAll消除循环:

if (listA.size() - listB.size() > 0) {
    listB.addAll(Collections.nCopies(listA.size() - listB.size(), ""));
}

int diff = listA.size() - listB.size();
if (diff > 0) {
    listB.addAll(Collections.nCopies(diff, ""));
}

最新更新