我在计算机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后才移动它。停止..和蓝色的没有出现。

最佳答案

您的代码永远不会达到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。

高温超导

10-08 13:37