我在计算机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。
高温超导