2016-12-01 53 views
1

給出兩個字符串,每個字符串代表善良或邪惡雙方的成員,找出哪一方會勝利。比較運算符沒有返回正確值

良好:霍比特 - 1,男性 - 2,精靈 - 3,矮人 - 3,鷹 - 4,奇才 - 10

危機:獸族 - 1,男性 - 2,Wargs - 2,地精 - 2 ,Uruk Hai - 3,Trolls - 5,奇才 - 10

我寫了一個函數來確定哪一方會贏。它大部分時間都適用,但有時它表現奇怪。

function goodVsEvil(good, evil){ 
//string to array good and array evil in integers 
    var aG = good.split(" ").map(x=>parseInt(x)) 
    var aE = evil.split(" ").map(x=>parseInt(x)) 

//calculate final score good and final score evil 
    var fSG = aG[0]*1 + aG[1]*2 + aG[2]*3 + aG[3]*3 + aG[4]*4 + aG[5]*10 
    var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[5]*10 

    console.log('equals: '+ (fSG == fSE)) 
    console.log('good > evil: '+(fSG > fSE)) 
    console.log('good < evil: '+(fSG < fSE)) 
} 

一些錯誤情況:

var result = goodVsEvil('1 0 0 0 1 0', '0 0 0 0 0 1 0') 
//output 
good: 5 
evil: 5 
equals: false 
good > evil: false 
good < evil: true 

另:

good: 10 
evil: 10 
equals: false 
good > evil: false 
good < evil: true 

另:

good: 2 
evil: 2 
equals: false 
good > evil: true 
good < evil: false 

在這裏,它的正常工作

var result = goodVsEvil('1 1 0 0 0 0', '0 0 0 0 1 0 0') 
good: 3 
evil: 3 
equals: true 
good > evil: false 
good < evil: false 

這個謎題是從codewars:https://www.codewars.com/kata/good-vs-evil/train/javascript

回答

2

如果您登錄fSGfSE,你會發現,fSE實際上等於15在你的第一個例子,不5

那是因爲你在計算的值就行了錯字。 您正在使用aE[5]兩次,而不是aE[6]

var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[5]*10 

這應該是

var fSE = aE[0]*1 + aE[1]*2 + aE[2]*2 + aE[3]*2 + aE[4]*3 + aE[5]*5 + aE[6]*10 

作爲一個側面說明,請嘗試找到你的變量更全面的名字。亂碼三個字母的組合使得真正難以理解這些值背後的意圖! :-)

+0

該死!太愚蠢了...... *嘆* –