2016-10-28 55 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