2016-10-28 61 views
1

我剛剛開始學習JavaScript,這是我的第一個問題在stackoverflow,所以隨時批評我,如果我接近這個錯誤的方式。divisibleByThreePairSum,我得到對重複

var divisibleByThreePairSum = function(array) { 
    var pairs = []; 

    for (var i = 0; i < array.length; i++) { 
    for (var j = i++; j < array.length; j++) { 
     var sum = array[i] + array[j]; 

     if (sum % 3 === 0) { 
     pairs.push([i, j]); 
     } 
    } 
    } 

    return pairs; 
} 
console.log(divisibleByThreePairSum([3,1,0,2,1,3,2,0])); 

這給了我答案;

[ [ 1, 3 ], [ 1, 6 ], [ 3, 4 ], [ 5, 5 ], [ 5, 7 ], [ 7, 7 ] ] 
[Finished in 0.2s] 

對於第二個「for」循環,我格式化它像這樣,(J = ++),以避免像[1,3],[3,1],但我不似乎能以重複擺脫像[5,5]和[7,7]這樣的配對。是否有任何可能的方式來對代碼進行不同的格式化,以避免這種情況發生?我再次道歉,如果這是不正確的問題;我一定會更頻繁地使用這個網站,所以請讓我知道如果我做錯了什麼「問題格式」明智的,謝謝!

回答

0

問題是j = i++。這會將i的值分配給j,然後遞增值i。這也會導致跳過i的替代值,因爲它會增加兩次。

for(var i = 0; i< 5; i++){ 
 
    for(var j = i++; j< 5; j++){ 
 
    console.log(i,j) 
 
    } 
 
}

你還是使用j=i+1。這將發送下一個值並不會增加的i

var divisibleByThreePairSum = function(array) { 
 
    var pairs = []; 
 

 
    for (var i = 0; i < array.length; i++) { 
 
    for (var j = i+1; j < array.length; j++) { 
 
     var sum = array[i] + array[j]; 
 

 
     if (sum % 3 === 0) { 
 
     pairs.push([i, j]); 
 
     } 
 
    } 
 
    } 
 

 
    return pairs; 
 
} 
 

 
console.log(divisibleByThreePairSum([3, 1, 0, 2, 1, 3, 2, 0]));

+0

哇價值,我不知道它是這樣一個小的一段代碼,完全改變了這個問題。十分感謝你的幫助! – yunjae123

相關問題