如果x = location,Java Paint会执行此操作

时间:2011-12-05 14:27:38

标签: java awt

我在计算机SCI AP中,我无法弄清楚为什么这不起作用

public static void moon(Graphics g) {
    for(int k = 0; k < 550; k+=2) {
        if (k == 550) {     
            g.setColor(Color.blue);
            g.fillOval(k,50,50,50);
            for(long delay = 1; delay<10000000; delay++);   
            g.setColor(Color.white);
            g.fillOval(k,50,50,50); 
            k = 0;
        } else {
            g.setColor(Color.black);
            g.fillOval(k,50,50,50);
            for(long delay = 1; delay<10000000; delay++);   
            g.setColor(Color.white);
            g.fillOval(k,50,50,50); 
        }
    }
}

所以基本上会让黑色椭圆形在屏幕上移动然后当k = 550时它会让蓝色的那个穿过屏幕..但它不会这样做它只是移动黑色然后在它击中550之后它停止了......并且蓝色的不会出现。

4 个答案:

答案 0 :(得分:3)

您将始终输入else路径,因为for循环从0到549计数,因此k永远不会等于550。

答案 1 :(得分:0)

您的代码永远不会达到k = 550 for循环中的条件为k < 550。设为k <= 550,它应该有效。

但是,您可能不会发现它,因为您使用for(long delay = 1; delay<10000000; delay++);来延迟 - 这不是一种非常可靠的延迟方式。

要更可靠地查看事情,请尝试使用Thread.sleep(long) 为了记录,我相信有一些反对一般使用Thread.sleep(long)的论点,但在这种情况下它应该足够了。

虽然我在这里,但k = 0任务是多余的,甚至是糟糕的风格。您不应该在循环中分配循环变量 。如果再次输入循环,for (int k=0部分将负责将k设置为0。

HTH

答案 2 :(得分:0)

for(int k = 0; k < 550; k+=2)

将循环,但k不会进入值为550的循环,因此您的if语句将不会被执行

使用此

for(int k = 0; k <= 550; k+=2)

答案 3 :(得分:0)

k永远不会是550,因为你的表达式为k < 550

将其更改为k <= 550或将550部分完全移出循环。

IMO它并不真正属于循环,如果它只发生一次而另一个 n 它不会。最好有一个内部循环用于所有其余的,以及一个外循环,使其永远运行而不是修改循环变量。