如何遍历类的数组列表

时间:2018-06-29 15:30:51

标签: java oop foreach polymorphism

import java.util.ArrayList;

public class circleTester {

        public static void showCenter(Circle2 circle) {
            System.out.println(circle.getName() + "'s " + circle.getCenter());
        }

    public static void main (String []args) {

        ArrayList<Circle2> circles = new ArrayList<Circle2>();
        circles.add(new Circle2(3, 5, 4));
        circles.add(new Circle2(4, 2, 5));
        circles.add(new Cylinder2(5, 2, 3, 5));
        circles.add(new Cylinder2(3, 4, 7, 6));
        circles.add(new Oval2(6, 5, 7, 3));
        circles.add(new Oval2(4, 2, 3, 1));
        circles.add(new OvalCylinder2(2, 3, 4, 5, 6));
        circles.add(new OvalCylinder2(3, 3, 5, 4, 7));

        for (Circle2 i : circles) {
            showCenter(circles(i));
        }
      }
    }

我有四个单独的类:Circle2,Cylinder2,Oval2和OvalCylinder2。它们都是从Circle2和OvalCylinder2派生的。我试图将它们放入数组列表,然后遍历数组列表并通过showCenter函数运行每个实例,该函数将调用两个getter(getName和getCenter)来告诉您类的名称(Circle,Cylinder,椭圆形和椭圆形圆柱体),其中心是(x,y)。但是,在我的for循环中,出现错误:

“类型为circleTester的方法circle(Circle2)未定义” 我该如何解决?

2 个答案:

答案 0 :(得分:3)

使用showCenter(i)代替showCenter(circles(i)),因为i已经是Circle2类型的对象

for (Circle2 circle : circles) {
    showCenter(circle);
}

答案 1 :(得分:0)

foreach循环语法的语法为:

for (T element : collection) {
  ... 
}

读为“对于集合中的每个T元素”。在您的情况下,i已经具有Circle2类型,可以直接传递给showCenter方法。

for (Circle2 circle : circles) {
    showCenter(circle);
}

如果要改为使用索引遍历列表:

for (int i = 0; i < circles.size(); i ++) {
        showCenter(circles.get(i));
}

同样可以使用Iterator来实现

for (Iterator<Circle2> i = circles.iterator(); i.hasNext(); )
      showCenter(i.next())
} 

并且由于有了新的forEach方法:

circles.forEach(cicle -> 
                  System.out.println(circle.getName() + "'s " + circle.getCenter()))

您可以将其与labmda表达式结合使用。

如果您使用的是Java8 +,则最好使用最新版本