1

ここでいくつかのコードに出くわしましたhttps://stackoverflow.com/a/2922778/2176900次のように始まりました:

for (i = 0, j = nvert-1; i < nvert; j = i++) {...`

括弧内に4つのものがある場合(「i = 0」、「j = nvert-1」、「i < nvert」、「j = i++」)、それが何をするのかわかりません。私は明らかにこれをグーグルで検索しようとしましたが、答えが見つからないようです。カッコ内が何と呼ばれているかだけでもわかっていただければ幸いです。

ありがとう

4

3 に答える 3

8

4 つのことはありません。まだ3つあります。

  • ループ前のステートメント
    i = 0, j = nvert-1

  • 反復条件
    i < nvert

  • 反復後のアクション
    j = i++

そのループ前のステートメントは、実際にはおそらく次のようになるはずです。
var i = 0, j = nvert-1

1 つの宣言で複数の変数を宣言できることを思い出してください。それがここで起こっていることです。

于 2013-06-19T23:36:19.540 に答える
4

@LightnessRacesinOrbit と @basilikum からの優れた回答に追加するために、forこのような異常なループを見るときに役立つヒントを次に示します。より原始的な形式に分解します。

任意のforループ:

for( initialize; condition; advance ) {
    // loop body here
}

同等のwhileループに変換できます。

initialize;
while( condition ) {
    // loop body here
    advance;
}

だからあなたが見つけたループ:

for ( i = 0, j = nvert-1;  i < nvert;  j = i++ ) {
    // loop body here
}

書くことができます:

i = 0,  j = nvert - 1;
while( i < nvert ) {
    // loop body here
    j = i++;
}

これで、それをさらに単純なステップに分解できます。

@basilikum が指摘したように、最初の行は次のとおりです。

i = 0,  j = nvert - 1;

以下と同じです:

i = 0;
j = nvert - 1;

そしてループの最後の行:

    j = i++;

以下と同じです:

    j = i;
    i = i + 1;

これらをコードに戻すと、次のようになります。

i = 0;
j = nvert - 1;
while( i < nvert ) {
    // loop body here
    j = i;
    i = i + 1;
}

これは元のループよりも冗長ですがfor、元のループが混乱している場合は考えやすいかもしれません。

于 2013-06-20T00:15:31.520 に答える
1

ユーザーの Lightness Races in Orbit が既に説明した構文に加えて、このようなループが発生する理由は、おそらく配列をループして、常に 2 つの隣接するアイテムにアクセスするためです。

var list = [1,2,3,4],
    nvert = list.length;

for (i = 0, j = nvert-1; i < nvert; j = i++) {
    //...
}

最初の反復:

i = 0; //index of first item
j = nvert-1; //indext of last item

次の反復:

j = i;     //j becomes the old value of i
i = i + 1; //i gets incremented by one

したがって、配列を考慮すると、[1,2,3,4]i反復jで次の項目が表されます。

//first iteration
i => 1
j => 4

//second iteration
i => 2
j => 1

//third iteration
i => 3
j => 2

//fourth iteration
i => 4
j => 3
于 2013-06-19T23:54:22.980 に答える