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)未定义” 我该如何解决?
答案 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())
}
circles.forEach(cicle ->
System.out.println(circle.getName() + "'s " + circle.getCenter()))
您可以将其与labmda表达式结合使用。
如果您使用的是Java8 +,则最好使用最新版本