1

你能解释一下这个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);
    }
4

4 回答 4

10

for 循环有三个部分,由 ; 分隔

  1. 初始化;
  2. 终止条件;
  3. 迭代(每次循环都要做的事情)

这三个部分都是可选的。你可以写一个这样的循环for(;;) {},它会永远持续下去。或者这个:for(;;) { break; }它会立即终止。或者像这样:

int i = 0;  
for(;;) {
  if (++i>=4) { break; } 
}

它将在四次迭代后终止,通过break.

您问题的循环缺少迭代部分。(但循环变量正在循环体本身中更新,例如i++)。

唯一的其他特殊功能是循环在第一部分初始化两个变量,i并且ii. 它们由逗号运算符分隔,这导致逗号分隔的表达式按顺序独立评估。

于 2012-12-23T02:57:00.597 回答
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);
    ...
}
于 2012-12-23T02:51:25.027 回答
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);
}

@:我仍然不知道为什么这段代码会像你的例子那样写。:)

于 2012-12-23T02:59:08.633 回答
1

它循环直到达到甲板大小。循环变量 i 稍后在第 3 行递增。这样做有点奇怪。可读性差。

于 2012-12-23T02:56:18.370 回答