我目前正在做一个课本外的项目,我遇到了一个while循环的隐蔽问题。课本中的代码如下;
while(getImage().getWidth(applet) <= 0);
double x = applet.getSize().width/2 - width()/2;
double y = applet.getSize().height/2 - height()/2;
at = AffineTransform.getTranslateInstance(x, y);我从来没有见过以分号结尾的while循环,所以我把我的代码解释为标准;
while(getImage().getWidth(applet) <= 0) {
double x = applet.getSize().width/2 - width()/2;
double y = applet.getSize().height/2 - height()/2;
at = AffineTransform.getTranslateInstance(x, y);
}有人能解释一下这两者之间的区别吗?我改变了我的代码,就像第一个一样,我的程序运行得很好,但是我不明白其中的区别。
发布于 2012-07-15 22:58:34
您的更改更改了代码的逻辑。while(getImage().getWidth(applet) <= 0);的思想是等到小程序宽度大小为gets>0。然后就是剩下的代码了。(它可能会等待另一个进程初始化小程序)。
发布于 2012-07-15 22:55:23
分号是一个空语句。您可以在评估while循环的延续条件有副作用时使用它:循环将产生一系列副作用,这些副作用会在循环完成时使循环条件无效,或者永远运行。
例如,如果您每次调用getImage()时都会获得一个新图像,则循环将继续,直到返回的图像的宽度为<= 0。
下面是一个使用while循环查找字符串中a后面的第一个字符的简单示例:
int pos = 0;
String s = "quick brown fox jumps over the lazy dog";
while (i != s.length() && s.charAt(i++) != 'a')
;因为像这样阅读代码可能会令人困惑,所以通常将分号放在单独的行上,缩进为循环语句。
发布于 2012-07-15 23:00:00
这是有意为之的;在后台进程中异步加载图像,getWidth(ImageObserver)实际上询问图像是否已经可以给出宽度。这只是一个所谓的繁忙循环。第一个getWidth是-1。
这是一种糟糕的编码风格,而且在getHeigth仍未完全读取的情况下,getWidth也是可以识别的。
这源于java的第一个时期,它的互联网连接速度很慢。
使用ImageObserver回调会更好。
https://stackoverflow.com/questions/11492895
复制相似问题