2014-01-06 111 views
0

我參加了一個codecademy課程(找到了here),但一直告訴我「當代碼是紙和搖滾時,你的代碼返回'搖滾勝利'而不是'紙勝利',爲什麼?它應該是正確的。既然是在談論「搖滾勝利」,那麼它就是在談論搖滾與剪刀。那麼,爲什麼當「搖滾勝利」的唯一結果是甚至沒有紙時,「而不是紙勝利」呢?JavaScript中的岩石,紙張,剪刀

var compare = function (choice1, choice2) { 

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

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

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

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

}; 
+3

'if(choice1 ===「paper」){if(choice2 ===「rock」);如果兩個條件都是真的,或者你正在試圖用這種方法做什麼,那麼你是不是該如何測試。閱讀邏輯運算符:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators –

+0

也許這會幫助 - http://bit.ly/19NPQLh –

+0

問題後分號'if'語句。 – elclanrs

回答

3

看看你的第一個條件:

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

所以,如果choice1是搖滾,你進入if - 塊(這實際上並不返回任何東西,但因爲在這種情況下choice1實際上是"paper"它會進入else - 塊,無條件返回"rock wins"。嘗試重構它是這樣的:

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

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

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

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

但是,嘿,讓我們看看吧。嘗試把你的選擇到一個數組:

var choices = ["rock", "paper", "scissors"]; 

現在,請注意在右邊的項目總是擊敗項目向左(如果我們認爲陣列環繞)。我們如何使用它來簡化代碼?那麼我們就可以比較每個選擇的指標,同時注意處理剪刀石頭對比的邊緣情況:

var x = choices.indexOf(choice1), 
    y = choices.indexOf(choice2); 
if (x === y) { 
    return("The result is a tie!"); 
} else if (x > y) { 
    if (x == 3 && y == 0) { 
     return choice2 + " wins"; 
    } else { 
     return choice1 + " wins"; 
    } 
} else { 
    return choice2 + " wins"; 
} 

但是我們可以使用remainder operator%)這裏更容易地處理的邊緣情況:

var choices = ["rock", "paper", "scissors"]; 
var compare = function (choice1, choice2) { 
    var x = choices.indexOf(choice1), 
     y = choices.indexOf(choice2); 
    if (x === y) { 
     return("The result is a tie!"); 
    } 

    return (((x - y) % 3) > 0 ? choice1 : choice2) + " wins"; 
} 
+0

好的答案。如果在主要條件下,您可以考慮使用其他方法 –

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

在此再看看。你說:

IF選擇1 ===岩石,THEN IF選擇2 ===剪刀則不採取任何 ELSE(選擇1不巖) 迴歸「搖滾勝」

這是一個情況下明顯的括號有助於。我猜你的意思是這樣:

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

你的函數總是返回「搖滾勝」的時候選擇1是不是「搖滾」。這是因爲你已經使用了if - else語句。

什麼,你正在做的是: 如果選擇1是岩石做一些 否則返回「搖滾勝」

我給你的第一條語句:

if (choice1 === "rock") { 
     if (choice2 === "scissors") return ("rock wins"); 
     if (choice2 === "paper") return ("Paper wins"); 
    } 
0

如果數據非常控制,你可以這樣做:

如果(選擇1 + 「」 + 選擇2)你會發現 「KS」, 「RR」 或 「SP」,你選擇1 億韓元,低於(例如其他丟失)

function getWinner(choice1, choice2){ 
    var both_str, after_removing; 

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

    both_str = (choice1 + "" + choice2); 
    after_removing = both_str.replace(RegExp("ks|rr|sp", "g"), ""); 

    return (choice1 + ((both_str.length - after_removing.length) ? " won" : " lost")); 
} 

,你會得到以下結果:

console.log(getWinner("scissors", "paper")); //scissors won 
console.log(getWinner("rock", "scissors")); //rock won 
console.log(getWinner("paper", "rock")); //paper won 

console.log(getWinner("scissors", "rock")); //scissors lost 
console.log(getWinner("rock", "paper")); //rock lost 
console.log(getWinner("paper", "scissors")); //paper lost 

console.log(getWinner("scissors", "scissors")); //The result is a tie! 
console.log(getWinner("rock", "rock")); //The result is a tie! 
console.log(getWinner("paper", "paper")); //The result is a tie! 
1

jsFiddle Demo

當使用if語句時,您會做出有意思的選擇。後面不應該有分號。另外,當使用許多else else語句時,邏輯組合可能會很困難。在這些情況下,最好使用switch case statementMDN

var compare = function (choice1, choice2) { 
if(choice1==choice2)return "The result is a tie!"; 
switch(choice1+choice2){ 
    case "rockscissors": case "scissorsrock": 
     return "rock wins"; 
    case "rockpaper": case "paperrock": 
     return "paper wins"; 
    default: return "scissors wins"; 
} 
};