这个问题不是一个需要解决的问题,而是我的代码的一个方面,我希望能帮助理解。
我首先在屏幕中间画一条线,以便更容易解释我不理解的内容。
用户可以输入每行之间的像素数。
循环的说明:它从左侧Y轴的中间到右下角绘制一条线,然后重复该操作,通过userInput增加startY整数并将endY整数减少相同的量,直到框架的底部已经到达。
g.setColor(Color.RED);
g.drawLine(startX, getHeight() / 2, endX, getHeight() / 2);
g.setColor(Color.BLACK);
for (int startY = getHeight() / 2; startY <= bottom; startY += userInput) {
g.drawLine(startX, startY, endX, endY);
endY -= userInput;
}
}
效果如下:http://i.imgur.com/TUpvI10.png
现在当我切换这些代码行时:
g.drawLine(startX, startY, endX, endY);
endY -= userInput;
到
endY -= userInput;
g.drawLine(startX, startY, endX, endY);
效果如下:http://i.imgur.com/zm1ubfn.png
正如你所看到的,它在右侧绘制了一条额外的线条,这意味着循环执行的时间更长了吗?我不明白为什么。两个版本的循环是否应该同时停止(当达到帧的底部时)?
那么为什么在我切换这些语句时循环会执行额外的时间?
我很困惑,而且我无法绕过这个逻辑。
答案 0 :(得分:3)
在这两种情况下,当到达框架的底部时,它最后一次绘制线条。
在第一种情况下,它从底部到顶部绘制线,然后递减endY变量(在这种情况下,它不再相关)。在第二种情况下,它首先递减,这就是为什么线超过你的红线。
如果你无法理解这一点,请尝试将每行之间的像素设置为更大的数字,然后尝试遍历脑中的for循环。拿一篇论文写下所有变量以及他们目前存储的数字。也许你自己也在纸上划线;)
答案 1 :(得分:2)
实际上,循环不会再次执行,但是你的输出被userInput
像素偏移,正如人们可能预期的那样,因为你在绘制之前减少了endY