【发布时间】:2010-11-09 04:38:50
【问题描述】:
例如,这将是恒定的还是随着每次传递而变化?
for(int i = 0; i < InputStream.readInt(); i++)
【问题讨论】:
例如,这将是恒定的还是随着每次传递而变化?
for(int i = 0; i < InputStream.readInt(); i++)
【问题讨论】:
for(int i = 0; // executed once
i < InputStream.readInt(); // executed before each loop iteration
i++ // executed after each loop iteration
) {
....
}
【讨论】:
第一部分在循环开始之前执行一次。第二部分在每个循环之前检查,如果为真,则执行循环,如果为假,则循环中断。最后一部分在每次迭代后执行。
【讨论】:
它每次都执行。 for 语法是
int i = 0
while(true)
{
if(!(i < InputStream.readInt()))
{
break;
}
// for body
i++
}
【讨论】:
int i = 0; while(i < InputStream.readInt()) { //for body ... i++ } 的语法糖吗?我猜在功能上是等效的。
当控制流程图实际上是概念的最佳图形表示时。
http://upload.wikimedia.org/wikipedia/commons/0/06/For-loop-diagram.png
我认为主要问题是:确实
i < InputStream.readInt();
每次循环迭代都被执行?是的,确实如此。
在这种情况下,它不会更改任何敏感变量,代码中实际更改的唯一变量是 i,但 InputStream.readInt() 将在每次迭代时运行以进行比较,因此将运行 @987654324再次@InputStream。
类似的东西呢:
for (int i=0; i < xObj.addOne().parseInt(); i++)
(假设 addOne 方法返回一个大一整数的字符串表示形式)
如果我像往常一样调用 xObj.addOne(),我的“检查”是否会增加将增加的值? 是的。 并且它会一直递增到下一个循环迭代吗? 是的。
就像在做
int x = 0;
for (int i=0; i < ++x; i++);
这永远不会终止,因为 ++x 总是大于 x(也是 i)
举个不平凡的例子怎么样?
int x = 6;
for (int i=0; i < x--; i++) {
System.out.print(i+" ");
}
输出
0 1 2
【讨论】: