这个for循环语法很困惑

时间:2012-12-23 02:48:08

标签: java language-agnostic

你能解释一下这个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 个答案:

答案 0 :(得分:10)

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

  1. 初始化;
  2. 终止条件;
  3. 迭代(每次循环都要做的事)
  4. 所有三个部分都是可选的。你可以编写一个像for(;;) {}这样的循环,它会永远持续下去。或者这个:for(;;) { break; }它会立即终止。或者像这样:

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

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

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

    唯一的另一个特殊功能是循环正在初始化第一部分iii中的两个变量。它们由逗号运算符分隔,这使得逗号分隔的表达式可以按顺序独立评估。

答案 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行中稍后递增。这样做有点奇怪。可读性差。