2016-02-09 71 views
0

我有這2個循環來找到整數數組中的最大數字(for循環和一個while循環,用於相同的目的) For :把一個for循環和一個while循環變成一個do ... while循環JavaScript

var forHighest = function(array) { 
    var highest = array[0]; 
    for (var i = 0; i < array.length; i++) { 
    if (highest < array[i]) { 
     highest = array[i]; 
    } 
    } 
    return highest; 
}; 

雖然:

var whileHighest = function(array) { 
    var i = 0; 
    var highest = array[0]; 
    while (i < array.length) { 
    if (array[i] > highest) 
     highest = array[i]; 
    i++; 
    } 
    return highest; 
}; 

但現在我需要做一個While循環,但一切我嘗試不斷給我以我的數組的[0]索引的數量。我不認爲我以前曾經在功能上使用過do ... while循環,所以我可能不完全理解它們是如何工作的。下面是一些我嘗試:

var doWhile = function(array) { 
    var i = 0; 
    do { 
    i++; 
    } while (i < array.length); 
    if (array[i] > highest) 
    highest = array[i]; 
    return highest; 
}; 

也:

var i = 0; 
var highest = array[0]; 
do{ 
    if(highest < array[i]){ 
    highest = array[i]; 
    i++; 
    } 
    } while(i < array.length); 

和:

var doWhile = function(array) { 
    var i = [i]; 
// var i = 0; 
    var highest = array[i]; 
    do 
     { 
     i++; 
     } while (array[i] < highest && i < array.length); 
     // if (array[i] > highest); 
     return array[i]; 

但他們沒有工作。有人可以向我解釋我做錯了什麼嗎?

+2

你首先做一方面是完全沒有意義的(什麼都不做的環,除了增量I) - 你的第二個循環將永遠循環下去,因爲你需要做的我++ OUTSIDE if條件,你的第三個循環使'i'成爲一個數組,所以,不會工作......儘管......移近了i + +在第二個do..while以外的條件,並且你應該是黃金 –

+0

如果你的目的是找到最大和最小,那麼你可以看看這個 http://stackoverflow.com/questions/1669190/javascript -min-max-array-values – brk

+0

@sinto - 數組沒有最大/最小值函數(還沒有?) –

回答

1

首先,瞭解do-while循環與while循環沒有太大區別。唯一的區別是do-while是退出測試循環,而while循環是入口測試循環。

因此,在do-while循環標準,即圓括號中的條件,在退出循環時被評估。爲了退出循環,它必須至少進入循環一次。因此,確保至少一次運行do-while循環中的代碼塊。除此之外,while循環的工作方式與do-while相同。相同的初始化代碼在循環內引入退出標準也保持不變。

現在看看你的代碼,while循環(如下圖所示)正常工作:

while (i < array.length) { 
    if (array[i] > highest) 
     highest = array[i]; 
    i++; 
    } 

現在,我們可以通過簡單的移動while語句來結束改寫爲do-while並放入do它的地方。請注意,循環之前的代碼(即循環初始化代碼)也不需要更改。

也就是說,

var i = 0; 
var highest = array[0]; 
do { 
    if (array[i] > highest) 
     highest = array[i]; 
    i++; 
    } while (i < array.length); 
return highest; 

正如在評論中提及的@Jaromanda X,你應該是金:)

+1

的最大做得很好解釋while'和'做... while' –

+0

是的,謝謝你這麼多@SarathChandra之間'的區別 - 你居然rlly解釋這比任何的資源,更好的,我發現online-謝謝你真是太棒了!我會很感激! –

+0

@ H.Hirschfeld:很高興能幫到你! – SarathChandra

1

正如在評論中提到的,有更好的方法來獲得最大/分,但問題的關鍵是要知道如何寫一個do...while循環

你的第二個做...而接近

var i = 0; 
var highest = array[0]; 
do { 
    if (highest < array[i]){ 
     highest = array[i]; 
    } 
    i++; // this line moved out of the if block 
} while(i < array.length); 

然而,更準確

var i = 1; 
var highest = array[0]; 
if (array.length > 1) { 
    do { 
     if(highest < array[i]){ 
      highest = array[i]; 
     } 
     i++; 
    } while(i < array.length); 
} 

因爲沒有需要檢查,如果數組是一個單一的元素,也不需要檢查數組[0]反對數組[0] ,這樣你就可以開始與我的循環= 1

+0

而且,太感謝您@Jaromanda X - 這rlly清理do..while我和一些細節循環!謝謝,我真的很感激! –