我在计算机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之后它停止了......并且蓝色的不会出现。
答案 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 它不会。最好有一个内部循环用于所有其余的,以及一个外循环,使其永远运行而不是修改循环变量。