当前位置: 首页 > 知识库问答 >
问题:

是否可以擦除for()循环中的ArrayList元素?

郏志学
2023-03-14

我有这个代码

outlets是传递给方法的ArrayList;riverBasin是int(int[]riverBasin)的2D“矩阵”;

for (int[] item: outlets) {
    if (item[0] < 2 || item[0] > this.riverBasin.length - 1 || item[1] < 2 || item[1] > this.riverBasin[0].length - 1) {

        System.out.println("This provisionally substitutes error catching. Outlet (" + item[0] + "," + item[1] + ") is not correct.");
        outlets.remove(item);
        System.out.println("Remaining outlets: ");
        for (int[] atem: outlets) {
            System.out.print("(" + atem[0] + "," + atem[1] + ")\n");
        }
    }
    else {
        this.riverBasin[item[0]][item[1]] = 10;
    }
}

从ArrayList outlets中删除“项”会生成错误:

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
    at java.util.AbstractList$Itr.next(AbstractList.java:343)
    at org.geoframe.ocn.Eden.setMultipleOutlet(Eden.java:135)
    at org.geoframe.ocn.Eden.main(Eden.java:205)

但我并不完全理解。然而,我怀疑我弄坏了迭代器。对的那么我如何删除ArrayList中不需要的元素呢。

提前感谢您的帮助,

里卡多

共有3个答案

怀德馨
2023-03-14

不能使用“for each”循环删除。你可以用迭代器代替它。

韦翰音
2023-03-14

需要显式使用迭代器并调用remove()。

final Iterator<int[]> iterator = outlets.iterator();
while (iterator.hasNext()) {
    final int[] item = iterator.next();
    ....
    if (...) {
        iterator.remove();
    }
}
满昊然
2023-03-14

应该使用迭代器迭代ArrayList。然后使用迭代器的remove方法。

 类似资料:
  • 我当前正在将一个ArrayList转换为一个字符串,以便将其发送到一个DB,这样我就可以在另一端检索它,并稍后将其转换回一个ArrayList。 我的思路是通过执行以下操作将其转换为当前的字符串 是ArrayList,看起来如下所示: 当我查看数据库时,它看起来像这样 如何删除开头的和最后的以便在数据库上看起来像? 在另一端,我可以使用以下方法获得它: (我正在使用SQLite,这是我大学项目的一

  • 这是我想做的代码,但什么也没有做。我甚至试过这个 但我找不到任何解决办法...有人能帮我吗?

  • 问题内容: 我有一个奇怪的问题。我以为这会花我几分钟,但现在我已经挣扎了几个小时……这就是我得到的: 该是 在ArrayList中我得到了一些字符串(共14个左右),和他们的9,它得名_Hardi。 并使用上面的代码,我想删除它们。如果我使用a,那么它将打印出9次,这是好的,因为_Hardi在ArrayList中是9次。 但是,当我使用它时,它不会删除所有9个,而只会删除几个。我做了一些测试,我也

  • 问题内容: 我有一个包含以下代码段的受测试方法: 我的单元测试代码如下所示: 问题是,在运行测试时,测试代码永远不会进入for循环。我应该在什么时候指定条件才能进入for循环?目前,我已指定,但我猜它从未使用过。 问题答案: 您的问题是,在for-each循环中使用集合时,将调用其方法;而且您还没有使用该特定方法。 我强烈建议您传递一个真实的列表,而不是模拟列表,该列表中的元素只是您的模拟对象,您

  • 问题内容: 是否可以在增强的for循环中找到当前索引?如果可以,怎么办? 我知道我们可以用一个额外的变量来检查它。但是还有其他方法。 问题答案: 是否可以在增强的for循环中找到当前索引? 不。如果需要索引,建议您使用普通的for循环。 但是,在这种情况下,您似乎实际上并不需要索引。除非您要处理某种非常奇怪的列表类型,否则可以使用和使用方法,如下所示:

  • 问题内容: 我试图设置获取所有元素的ID 。我写了以下代码: 但是我在控制台中得到以下输出: 这不是我所期望的。为什么第二个控制台输出却第一个控制台输出是? 问题答案: 在回答原始问题时,您使用不正确。在您的代码中,是索引。因此,要从伪数组中获取值,就必须这样做,而要获取id,就必须这样做。但是,首先不应该这样做。 摘要 永远不要使用来迭代nodeList或HTMLCollection。避免它的原