Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么可以';Java是否为每个循环解析其中的变量?_Java_Variables_Foreach_Resolve - Fatal编程技术网

为什么可以';Java是否为每个循环解析其中的变量?

为什么可以';Java是否为每个循环解析其中的变量?,java,variables,foreach,resolve,Java,Variables,Foreach,Resolve,在下面的for each循环中,我在标记为!的行中得到一个“bird cannot be resolved”错误!。我已经设置了一个由抽象类BirdType实现的接口Bird,Cardinal、Hummingbird、Bluebird和Vulture是其子类。getColor()和getPosition()方法是在抽象类中定义的,而fly()对于每个子类都是唯一的。这个客户机代码实际上是由我的教授提供的,用于测试我设置的接口/继承关系。注意,我已经测试了接口、抽象类和子类,它们似乎都能工作。我认

在下面的for each循环中,我在标记为!的行中得到一个“bird cannot be resolved”错误!。我已经设置了一个由抽象类BirdType实现的接口Bird,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);
        }
    }
}

您需要将要在
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);
}
否则,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);

正如在评论中所说,缩进不是Java语言的一部分,它与语法无关。但是您应该使用它使代码更易于阅读,如中所示。

您需要将要在
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);
}
否则,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);

正如在评论中所说,缩进不是Java语言的一部分,它与语法无关。但是,您应该使用它使代码更易于阅读,如中所述。

您编写Java就像编写Python一样。缩进行并不会使它们成为
for
循环的一部分。您编写Java就像编写Python一样。缩进行不会使它们成为
for
循环的一部分。