簡體   English   中英

Java括號中帶有四個“事物”的for循環如何工作?

[英]How does a for-loop with four 'things' in the parenthesis work i Javascript?

我在這里遇到了一些代碼,例如https://stackoverflow.com/a/2922778/2176900 ,它是這樣開始的:

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

而且我不明白當括號中包含四項內容(“ i = 0”,“ j = nvert-1”,“ i <nvert”和“ j = i ++”)時該怎么辦。 我顯然一直在嘗試使用Google搜索,但是似乎找不到任何答案。 我敢肯定,如果我只知道括號中的內容是什么,我會很高興的。

謝謝

它沒有四件事。 它仍然有三個。

  • 循環前語句
    i = 0, j = nvert-1

  • 迭代條件
    i < nvert

  • 迭代后的動作
    j = i++

該循環前語句實際上可能應該讀取為:
var i = 0, j = nvert-1

請記住,我們可以在一個聲明中聲明多個變量。 這就是這里發生的事情。

為了增加來自@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循環更冗長,但是如果原始的循環令人困惑,則可能更容易考慮。

除了用戶在Orbit Races Orbit中已經解釋過的語法外,具有這種循環的原因很可能是在數組上循環並始終訪問兩個相鄰項。

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]ij將代表每次迭代的以下各項:

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

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

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

//fourth iteration
i => 4
j => 3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM