了解循环逻辑

时间:2014-08-11 07:16:20

标签: java for-loop logic

这个问题不是一个需要解决的问题,而是我的代码的一个方面,我希望能帮助理解。

我首先在屏幕中间画一条线,以便更容易解释我不理解的内容。

用户可以输入每行之间的像素数。

循环的说明:它从左侧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

正如你所看到的,它在右侧绘制了一条额外的线条,这意味着循环执行的时间更长了吗?我不明白为什么。两个版本的循环是否应该同时停止(当达到帧的底部时)?

那么为什么在我切换这些语句时循环会执行额外的时间?

我很困惑,而且我无法绕过这个逻辑。

2 个答案:

答案 0 :(得分:3)

在这两种情况下,当到达框架的底部时,它最后一次绘制线条。

在第一种情况下,它从底部到顶部绘制线,然后递减endY变量(在这种情况下,它不再相关)。在第二种情况下,它首先递减,这就是为什么线超过你的红线。

如果你无法理解这一点,请尝试将每行之间的像素设置为更大的数字,然后尝试遍历脑中的for循环。拿一篇论文写下所有变量以及他们目前存储的数字。也许你自己也在纸上划线;)

答案 1 :(得分:2)

实际上,循环不会再次执行,但是你的输出被userInput像素偏移,正如人们可能预期的那样,因为你在绘制之前减少了endY