jm.*_*ter 1 java variables foreach resolve
在下面的每个循环中,我在标记的行上得到"鸟无法解析"错误.我已经设置了一个接口Bird,它由一个抽象类BirdType实现,其中Cardinal,Hummingbird,Bluebird和Vulture是子类.getColor()和getPosition()方法在抽象类中定义,而fly()对每个子类都是唯一的.这个客户端代码实际上是由我的教授提供的,用于测试我设置的接口/继承关系.注意我已经测试了接口,抽象类和子类,它们似乎都可以工作.我认为问题在于for-each循环,但如果需要,我可以为其他类提供代码.有什么建议?
import java.awt.*;
public class Aviary {
public static final int SIZE = 20;
public static final int PIXELS = 10;
public static void main(String[] args){
//create drawing panel
DrawingPanel panel = new DrawingPanel(SIZE*PIXELS,SIZE*PIXELS);
//create pen
Graphics g = panel.getGraphics();
//create some birds
Bird[] birds = {new Cardinal(7,4), new Cardinal(3,8),
new Hummingbird(2,9), new Hummingbird(16,11),
new Bluebird(4,15), new Bluebird(8,1),
new Vulture(3,2), new Vulture(18,14)};
while (true){
//clear screen
g.setColor(Color.WHITE);
g.fillRect(0, 0, SIZE*PIXELS, SIZE*PIXELS);
//tell birds to fly and redraw birds
for (Bird bird : birds)
bird.fly();
! g.setColor(bird.getColor());
! Point pos = bird.getPosition();
g.fillOval((int)pos.getX()*PIXELS, (int)pos.getY()*PIXELS,
PIXELS, PIXELS);
panel.sleep(500);
}
}
}
Run Code Online (Sandbox Code Playgroud)
你需要将你想要在for循环中执行的主体包裹在大括号中
for (Bird bird : birds) {
bird.fly();
g.setColor(bird.getColor());
Point pos = bird.getPosition();
g.fillOval((int)pos.getX()*PIXELS, (int)pos.getY()*PIXELS,
PIXELS, PIXELS);
panel.sleep(500);
}
Run Code Online (Sandbox Code Playgroud)
否则,for循环的主体是后面的下一个语句).所以它相当于
for (Bird bird : birds)
bird.fly();
// bird is not in scope anymore
g.setColor(bird.getColor());
Point pos = bird.getPosition();
g.fillOval((int)pos.getX()*PIXELS, (int)pos.getY()*PIXELS,
PIXELS, PIXELS);
panel.sleep(500);
Run Code Online (Sandbox Code Playgroud)
正如Darien在评论中所说,缩进不是Java语言的一部分,它与语法无关.但是您应该使用它来使代码更容易阅读,如Java代码样式约定中所表达的那样.