你能解释一下这个for循环是如何工作的吗?
for (int i = 0, ii = deck.size(); i != ii;) {
int x = i % NUMBER_OF_CARDS;
int y = i / NUMBER_OF_CARDS;
Card d = deck.get(i++);
d.setFace(true); // face up
d.displayCard(40 + x * 90, y * 140 + 10); // draw them
println(d.getRank()); // println
text("Value:" + d.getRank() + " of " + d.getSuit(), 40+x * 90, y * 140 + 120);
}
答案 0 :(得分:10)
for循环有三个部分,分隔为;
所有三个部分都是可选的。你可以编写一个像for(;;) {}
这样的循环,它会永远持续下去。或者这个:for(;;) { break; }
它会立即终止。或者像这样:
int i = 0;
for(;;) {
if (++i>=4) { break; }
}
它将在四次迭代后通过break
终止。
您问题的循环缺少迭代部分。 (但循环变量正在循环体本身中更新,例如i++
)。
唯一的另一个特殊功能是循环正在初始化第一部分i
和ii
中的两个变量。它们由逗号运算符分隔,这使得逗号分隔的表达式可以按顺序独立评估。
答案 1 :(得分:5)
循环,
for (int i = 0, ii = deck.size(); i != ii;) {
...
Card d = deck.get(i++);
...
}
几乎相当于
for (int i =0; i < deck.size(); i++) {
...
Card d = deck.get(i);
...
}
答案 2 :(得分:2)
这个循环的两个主线是:
for (int i = 0, ii = deck.size(); i != ii;) {
Card d = deck.get(i++);
}
相当于:
for (int i = 0, ii = deck.size(); i != ii;) {
Card d = deck.get(i);
i++; // or i = i + 1
}
但如果:
非常不同Card d = deck.get(++i);
// mean:
// i++; // increase i before take from deck
//card d = deck.get(i);
基于此,我们将i++
部分移动到for循环而不是在函数体中增加它。所以我们可以改为“正常循环”:
for (int i =0; i < deck.size(); i++) {
Card d = deck.get(i);
}
@:我仍然不知道为什么这段代码会像你的例子那样写。 :)
答案 3 :(得分:1)
它循环直到达到甲板大小。循环变量i在第3行中稍后递增。这样做有点奇怪。可读性差。