为什么我不能在for循环条件下使用math(减法)?

问题描述 投票:1回答:4

我有两个字符串列表,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("");
}

这是为什么?

java for-loop condition
4个回答
9
投票

变量diff的第一个示例是常量,而第二个示例是在循环的每次迭代中计算条件,因此,因为您在迭代期间添加对象,所以列表的大小将会改变,因此两个代码片段不会相同事情。

我建议你继续第一种方法,即事先缓存循环条件的限制,而不是在每次迭代期间重新评估它。


0
投票

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


0
投票

每次调用list.add(“”)时,List的大小都会递增

所有(list.size() - list.size())每次通过迭代都会计算列表i的新大小。 e listB获得新的大小。

从您的代码段diff ==您要将项目添加到listB的剩余大小

选项1可以。


0
投票

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

我想建议一种替代方法,通过使用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, ""));
}
© www.soinside.com 2019 - 2024. All rights reserved.