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 ループには ; で区切られた 3 つのセクションがあります。

  1. 初期化;
  2. 終了条件;
  3. 反復 (ループのたびに行うこと)

3 つの部分はすべてオプションです。このようなループを書くことができfor(;;) {}、それは永遠に続きます。またはこれ:for(;;) { break; }すぐに終了します。またはこのように:

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

を介して、4回の反復後に終了しますbreak

あなたの質問のループには反復セクションがありません。(ただし、ループ変数は、 などのループ本体自体で更新されていますi++)。

他の唯一の特別な機能は、ループが最初のセクションで 2 つの変数を初期化していること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

このループの 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);

これに基づいて、一部を for ループに移動i++し、代わりに関数本体で増やします。したがって、「通常のループ」に変更できるのは次のとおりです。

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 に答える