Java IF语句未识别的元素

Java IF语句未识别的元素,java,arrays,Java,Arrays,我试图删除周长为12的三角形的所有元素,我设置了一个if语句来检查带有for循环的数组列表中三角形对象的所有周长 我的问题是,当我运行for循环时,它会删除周长等于12的所有三角形,但最后一个,它仍然会显示在输出中 代码: 您的问题是arrayList在每个循环中都减小了大小 例如,如果arrayList的大小是23,那么下一个循环将是22。在这种情况下,23没有索引,我建议您在迭代器上迭代arrayList,或者从最后一个索引开始向后循环,以第一个索引结束您是否也删除了一些圆 似乎每次从列表中

我试图删除周长为12的三角形的所有元素,我设置了一个if语句来检查带有for循环的数组列表中三角形对象的所有周长

我的问题是,当我运行for循环时,它会删除周长等于12的所有三角形,但最后一个,它仍然会显示在输出中

代码:


您的问题是arrayList在每个循环中都减小了大小

例如,如果arrayList的大小是23,那么下一个循环将是22。在这种情况下,23没有索引,我建议您在
迭代器上迭代arrayList,或者从最后一个索引开始向后循环,以第一个索引结束您是否也删除了一些圆

似乎每次从列表中删除一个形状时,都会“跳过”下一个形状。当从列表中删除一个元素时,所有后续元素的索引都将减少一。因此,如果删除元素22,那么下一个元素新索引是22,但最终使用一个简单的for循环跳过它

您可以做的是:

  • 将迭代更改为向后(从更高的索引变为0)
  • for(int i=ShapeList.size()-1;i>=0;i--){…}

  • 重新创建包含要保留的元素的形状的新列表,然后丢弃旧列表
  • 更新:我重新阅读了您的代码,我非常确信,当您必须删除一行中的两个实体时,您的问题是存在的。在最后一个三角形之前删除最大的圆,因此在增加索引时跳过它。
    我同意Basil Battikhi的观点,即循环的逆向顺序将非常适合您的问题

    问题在于,在使用array remove之后,元素会向左移动,因此每次删除后,索引i都会跳过1个值: 删除此列表中指定位置的元素。将任何后续元素向左移动(从其索引中减去一个)。有关详细信息,请查看。
    您可以轻松地为每个不需要的元素位置/索引创建另一个列表,然后将其删除。

    不确定这是否是问题的一部分。但是我会避免
    ShapeList.remove(I)
    形状列表上循环时
    。请参见示例。
    ShapeList.get(23)
    是第24个元素。
    java.lang.IndexOutOfBoundsException:Index:23,Size:23
    -索引以零为基础。大小为23的数组没有索引23,只有0-22。arraylist有25项。我猜
    remove()
    删除了两个元素,因此,当索引达到23时,就会抛出异常;即使我使用I循环代码,周长为12的三角形仍然存在。我更新了代码,因为我意识到这是一个问题,但我的问题仍然是关于仍然存在的元素,现在应该进行编辑。您是否在迭代器上对其进行了迭代?你做了一个反向循环吗?我没有看到任何更新的问题:/sorrybackward循环对您来说是最好的方式:)我在调试模式下运行了它,我不明白为什么它没有被删除,因为在调试中它说if语句为true,这可能是ide错误吗?不,调试工作正常,但是正如我告诉过你的,如果你移除一个元素,arrayList会在每个循环中减少大小-1,如果你使用反向循环,那么发生率不会改变,例如arrayList有{1,3,5,6,7},索引7是4,但是如果你移除了一个元素,比如3,索引7将是3,而不是4,对于每个循环a是否足够?我不确定,但我认为java不喜欢删除每个循环编辑中的元素:它将引发ConcurrentModificationException。在循环中删除向上的元素对java来说不太好,向后走就可以了。谢谢
    double smallestTriangle = 0.0;
    double biggestCircle = 0.0;
    
    /*for loops to get the smallest triangle(12) and largest circle(63.xx)*/
    
    for(int i = 0; i < ShapeList.size(); i++) {
        if (ShapeList.get(i).getClass().getName() == "Triangle") {
            System.out.println(ShapeList.get(i));
            System.out.println(ShapeList.get(i).getPerimeter() + " - " + smallestTriangle);
            if (ShapeList.get(i).getPerimeter() == smallestTriangle) {
                ShapeList.remove(i);
                System.out.println("REMOVED!");
            }
        }
        if (ShapeList.get(i).getClass().getName() == "Circle") {
            if (ShapeList.get(i).getPerimeter() == biggestCircle) {
                ShapeList.remove(i);
            }
        }
    }
    
    Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0
    12.0 - 12.0
    REMOVED!
    Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0
    12.0 - 12.0
    REMOVED!
    Triangle {a=4.9 b=5.0 c=8.9} perimeter = 18.8
    18.8 - 12.0
    Triangle {a=3.1 b=4.1 c=5.1} perimeter = 12.299999999999999
    12.299999999999999 - 12.0
    Triangle {a=4.0 b=5.0 c=6.0} perimeter = 15.0
    15.0 - 12.0
    Triangle {a=3.1 b=4.0 c=5.0} perimeter = 12.1
    12.1 - 12.0
    Triangle {a=3.9 b=4.8 c=5.7} perimeter = 14.399999999999999
    14.399999999999999 - 12.0
    Circle {r=1.0} perimeter = 6.283185307179586
    Circle {r=2.111} perimeter = 13.263804183456108
    Circle {r=1.1} perimeter = 6.911503837897546
    Triangle {a=3.9 b=4.0 c=5.9} perimeter = 13.8
    Square {l=3.0} perimeter = 12.0
    Rectangle {l=3.0 w=5.1} perimeter = 16.2
    Square {l=5.0} perimeter = 20.0
    Triangle {a=4.9 b=5.0 c=8.9} perimeter = 18.8
    Rectangle {l=8.0 w=2.1} perimeter = 20.2
    Circle {r=3.8} perimeter = 23.876104167282428
    Triangle {a=3.1 b=4.1 c=5.1} perimeter = 12.299999999999999
    Triangle {a=4.0 b=5.0 c=6.0} perimeter = 15.0
    Rectangle {l=3.1 w=5.2} perimeter = 16.6
    Circle {r=10.0} perimeter = 62.83185307179586
    Triangle {a=3.1 b=4.0 c=5.0} perimeter = 12.1
    Circle {r=2.0} perimeter = 12.566370614359172
    Circle {r=3.0} perimeter = 18.84955592153876
    Rectangle {l=3.0 w=5.2} perimeter = 16.4
    Square {l=100.1} perimeter = 400.4
    Square {l=100.2} perimeter = 400.8
    Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0 // <- not getting removed
    Triangle {a=3.9 b=4.8 c=5.7} perimeter = 14.399999999999999
    
    Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0
    Circle {r=1.0} perimeter = 6.283185307179586
    Circle {r=2.111} perimeter = 13.263804183456108
    Circle {r=1.1} perimeter = 6.911503837897546
    Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0
    Triangle {a=3.9 b=4.0 c=5.9} perimeter = 13.8
    Square {l=3.0} perimeter = 12.0
    Rectangle {l=3.0 w=5.1} perimeter = 16.2
    Square {l=5.0} perimeter = 20.0
    Triangle {a=4.9 b=5.0 c=8.9} perimeter = 18.8
    Rectangle {l=8.0 w=2.1} perimeter = 20.2
    Circle {r=3.8} perimeter = 23.876104167282428
    Triangle {a=3.1 b=4.1 c=5.1} perimeter = 12.299999999999999
    Triangle {a=4.0 b=5.0 c=6.0} perimeter = 15.0
    Rectangle {l=3.1 w=5.2} perimeter = 16.6
    Circle {r=10.0} perimeter = 62.83185307179586
    Triangle {a=3.1 b=4.0 c=5.0} perimeter = 12.1
    Circle {r=2.0} perimeter = 12.566370614359172
    Circle {r=3.0} perimeter = 18.84955592153876
    Rectangle {l=3.0 w=5.2} perimeter = 16.4
    Square {l=100.1} perimeter = 400.4
    Square {l=100.2} perimeter = 400.8
    Circle {r=10.1} perimeter = 63.46017160251382
    Triangle {a=3.0 b=4.0 c=5.0} perimeter = 12.0 //this element isn't getting removed
    Triangle {a=3.9 b=4.8 c=5.7} perimeter = 14.399999999999999