2013-05-28 30 views
0

我已經添加了今天發生的codeacademy錯誤的屏幕截圖。我試圖創建一個比較函數,它隨機選取0到1之間的數字(紙,剪刀或搖滾),輸入兩個選項並根據choice1與choice2的比較結果返回贏家。我遇到了用於javascript的比較函數的語法問題

,第一部分是註釋,但它說明了原來的紙剪刀石頭功能是如何構建

下面是代碼:

/*var userChoice = prompt("Do you choose rock, paper or scissors?"); 
var computerChoice = Math.random(); 
if (computerChoice < 0.34) { 
    computerChoice = "rock"; 
} else if(computerChoice <= 0.67) { 
    computerChoice = "paper"; 
} else { 
    computerChoice = "scissors"; 
}*/ 

var compare = function (choice1, choice2) {if (choice1 === choice2) return("The result is a tie!"); 
if (choice1 < 0.34) 
if(choice2 ==="scissors"); 
    return("rock wins"); 
} else if(choice2 ==="paper");{ 
    return("paper wins"); 
};  
}; 

它告訴我,還有別的一個意外標記上線15(其他如果行)

當我擦除else部分時,它給了我另一個語法錯誤,說明關於標記if的相同事情。我被困在我的語法的部分內容以及如何解決它。

+0

與註釋掉的代碼比較找到額外的'semicolons'使用。 – sabithpocker

+1

就像一個旁註:如果choice1是一個隨機挑選的數字,而choice2是「剪刀」,「搖滾」或「紙張」,那麼if語句if(choice1 === choice2)永遠不會是「true」。您應該選擇一種格式(0或1之間的數字或三個字符串中的一個),並以相同的格式將choice1和choice2傳遞給比較函數。 – basilikum

+0

這是一個很好的觀點。我將來會小心的。謝謝 – user2430360

回答

0

我有一種感覺,它與聲明後===;有關,無論哪種方式,這裏都是比較它們的更好方法。

function compare(a,b) 
{ 
    if(a==b)return "draw"; 
    switch(a) 
    { 
     case "rock":return (b=="scissors"?a:b)+" wins"; 
     case "paper":return (b=="rock"?a:b)+" wins"; 
     case "scissors":return (b=="paper"?a:b)+" wins"; 
    } 
} 
console.log(compare("scissors","paper")); 
+0

這可能會起作用,但由於我沒有被告知如何在本課程中使用案例,所以我很猶豫要試用它。當我被要求使用案例時,我仍然會使用這種語法作爲參考。感謝Isaac的幫助。 – user2430360

+0

沒問題,'switch'和'case'是少數幾個'goto'類型的語句之一,沒有人會因此而皺眉。 – Isaac

0

查看下面有關與分號相關的錯誤的評論。

var compare = function (choice1, choice2) { 
    if (choice1 === choice2) return("The result is a tie!"); 

    if (choice1 < 0.34) { 

    if(choice2 === "scissors") { // remove ; here 
     return("rock wins"); 
    } else if (choice2 === "paper") { // remove ; here 
     return("paper wins"); 
    } // remove ; here 

    } // add another else => what happens when choice1 >= 0.34 (not a rock) 
}; 

與所需else塊完整的功能將類似於:

var compare = function (choice1, choice2) { 
    if (choice1 === choice2) return("The result is a tie!"); 

    if (choice1 < 0.34) { // rock 

    if(choice2 === "scissors") { 
     return("rock wins"); 
    } else if (choice2 === "paper") { 
     return("paper wins"); 
    } 

    } else if (choice <= 0.67) { // paper 

    if(choice2 === "rock") { 
     return("paper wins"); 
    } else if (choice2 === "scissors") { 
     return("scissors wins"); 
    } 

    } else { // scissors 

    if(choice2 === "paper") { 
     return("scissors wins"); 
    } else if (choice2 === "rock") { 
     return("rock wins"); 
    } 

    } 
}; 

編輯
這僅僅是幫助,如果任何你克服了分號的混亂。通常情況下,函數定義不需要在其主體完成後通過放置最後一個關閉大括號}而具有;

function compare (choice1, choice2) { 
    // ... 
} 

相反,當我們給一個變量賦值時,語句以分號結尾。

var name = "John Doe"; 

因此,當我們將二者結合起來,我們定義一個函數,然後在需要使用分號被關閉賦值語句使用它。因此,語法:

var compare = function (choice2, choice2) { 
    // ... 
}; 
+0

此代碼正常工作。我會更多地研究它,但我喜歡你如何構建它並分隔每個條件以幫助我進行視覺追蹤。我特別發現在if/else語句中包含了有助於組織代碼的註釋。也許這是你指定每個可能結果的方式(包括選擇1的不同情況)。我不知道我是否提到,它應該是一個給定的選擇1是搖滾。 (這是在信息中提到的)。非常感謝你的幫助。我將來會回顧這種格式。 – user2430360

+0

查看我的編輯,我們何時使用分號,請考慮接受答案,如果它是最有幫助的。 –

0
function compare(choice1, choice2) { 
    if (choice1 === choice2) { 
    return "The result is a tie!"; 
    } 

    if (choice1 < 0.34) { 
    if (choice2 === "scissors") { 
     return "rock wins"; 
    } else if (choice2 === "paper") { 
     return "paper wins"; 
    } 
    } 
} 
+0

感謝您的幫助greg84。 – user2430360