2017-06-10 111 views
0

問題:給定兩個數組xyx愛麗絲的分數,並yBob的得分。比較愛麗絲和鮑勃之間的類似指數,並給予任何一個大於每個比較指數的任何一點的指數(如果等於,則沒有點數)。比較兩個數組與嵌套的for循環

INPUT:

x = [4,1,6] 
y = [1,1,5] 

預期輸出:

{Alice:2, Bob: 0} 

我的代碼:

x = [4,1,6] 
y = [1,1,5] 

results = {'Alice':0, 'Bob': 0} 

for (var i = 0; i < x.length; i++){ 
    for (var j = 0; j < y.length; j++){ 
    if (x[i] > y[j]){ 
     results['Alice'] += 1 
    }else if (x[i] < y[j]){ 
     results['Bob'] += 1 
    } 
    } 
} 

console.log(results) 

實際輸出:

{Alice: 5, Bob: 2} 

問題:

我在哪裏出了錯代碼?

回答

1

的問題是,你不應該使用嵌套循環。什麼,你在這裏做的是比較所有的Alice的對所有Bob的結果,在此順序:

  • 愛麗絲[0]對鮑勃[0] - 1點到愛麗絲
  • 愛麗絲[0]對鮑勃[1] - 1點到愛麗絲
  • 愛麗絲[0]與鮑勃[2] - 1點到Bob
  • 愛麗絲[1]與鮑勃[0] - 鐵
  • 愛麗絲[1]對Bob [1] - 領帶
  • Alice [1]與Bob [2] - 1指向Bob
  • Alice [2]與鮑勃[0] - 1點到愛麗絲
  • 愛麗絲[2]與鮑勃[1] - 1點到愛麗絲
  • 愛麗絲[2]與鮑勃[2] - 1點到愛麗絲

要解決這個問題,擺脫內部循環和j,並只使用i

var x = [4, 1, 6] 
 
var y = [1, 1, 5] 
 

 
var results = { 
 
    'Alice': 0, 
 
    'Bob': 0 
 
} 
 

 
for (var i = 0; i < x.length; i++) { 
 
    if (x[i] > y[i]) { 
 
    results['Alice'] += 1 
 
    } else if (x[i] < y[i]) { 
 
    results['Bob'] += 1 
 
    } 
 
} 
 

 
console.log(results)

2

錯誤在於您查看所有可能的配對,第一個數組中的第一個值和第二個數組中的第二個值。但只需要比較相同位置中的值。所以,你只需要一個循環:

x = [4,1,6] 
 
y = [1,1,5] 
 

 
results = {'Alice':0, 'Bob': 0} 
 

 
for (var i = 0; i < x.length; i++){ 
 
    if (x[i] > y[i]){ 
 
     results['Alice'] += 1 
 
    }else if (x[i] < y[i]){ 
 
     results['Bob'] += 1 
 
    } 
 
} 
 

 
console.log(results)

+0

@trinocot no brainer ..謝謝 –

0

您比較其中y數組的所有元素X數組的每個元素。爲了獲得預期的輸出,您需要將第一個元素或數組x與第y個數組的第一個元素進行比較,第二個元素與第二個元素相同。