2015-09-10 7 views
2

Я пытаюсь вызвать функцию getWinner внутри функции playFiveTimes, и каждый раз, когда я пытаюсь проверить свой код, он дает мне ошибку, которая говорит: «playerMove undefined», или если я попытаюсь набрать «rock «это говорит о том, что также не определено. В этот момент я полностью потерялся. Любая помощь будет оценена по достоинству.Вызов функции внутри другой функции

'use strict'; 

function getInput() { 
    console.log("Please choose either 'rock', 'paper', or 'scissors'.") 
    return prompt(); 
} 

function randomPlay() { 
    var randomNumber = Math.random(); 
    if (randomNumber < 0.33) { 
    return "rock"; 
    } else if (randomNumber < 0.66) { 
    return "paper"; 
    } else { 
    return "scissors"; 
    } 
} 

function getPlayerMove(move) { 
    if (!move) { 
    move = getInput(); 
    } 
    return move; 
} 

function getComputerMove(move) { 
    if (!move) { 
    move = getInput(); 
    } 
    return move; 
} 

function getWinner(playerMove, computerMove) { 
    var winner; 
    if (playerMove === computerMove) { 
    return ("It's a tie!"); 
    } else if (playerMove === "rock") { 
    if (computerMove === "paper") { 
     return "paper wins"; 
    } else { 
     return "rock wins"; 
    } 
    } else if (playerMove === "paper") { 
    if (computerMove === "rock") { 
     return "paper wins"; 
    } else { 
     return "scissors wins"; 
    } 
    } else if (playerMove === "scissors") { 
    if (computerMove === "paper") { 
     return "scissors wins"; 
    } else { 
     return "rock wins"; 
    } 
    } 
    return winner; 
} 

function playToFive() { 
    console.log("Let's play Rock, Paper, Scissors"); 
    var playerWins = 0; 
    var computerWins = 0; 
    // Write code that plays 'Rock, Paper, Scissors' until either the player or the computer has won five times. 
    while ((playerWins < 5) && (computerWins < 5)) { 
    getWinner(); 
    if (playerWins) { 
     playerWins += 1 
    } else { 
     computerWins += 1 
    } 
    } 

    console.log("Player chose " + playerMove + " while computer chose " + computerMove); 
    console.log("The score is currently " + playerWins + " to " + computerWins + "\n"); 
    return [playerWins, computerWins]; 
} 
console.log(playToFive()); 
+2

Ваш код не так легко понять без надлежащего отступа. Измените свой код, чтобы иметь правильный отступ. – jfriend00

+0

Вы вызываете 'getWinner()' без параметров в функции 'playToFive()'. Однако 'getWinner()' требует два параметра: 'playerMove' и' computerMove'. Это то, что вызывает ошибку «playerMove is undefined». – ivern

+0

У меня есть playerMove для работы, но он все еще говорит все, что я набираю после того, как это не определено – gwerd

ответ

-2

я вещь, что самая большая ошибка делает функцию внутри функции, попробуйте:

если (playerMove === "рок") | (computerMove === "paper") { возвращение «бумажных побед»; }

I предмет это мог работать. «|» означает, и, возможно, вы это знаете, но я точно не уверен

+0

Это неверно. | это побитовое ИЛИ (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#.7c_%28Bitwise_OR%29) в javascript, а не AND. –

+0

Как я сказал, попробуйте «и» (&&) вместо этих функций, и да, моя ошибка заключалась в том, что «|», но я считаю, что && есть и ... просто попробуйте, это намного проще! :) –

0

Вы вызываете функцию без параметров. Он ожидает двух параметров, как вы указали, function getWinner(playerMove, computerMove) {...}. Итак, поставьте два параметра в вызове функции, то есть getWinner('rock', 'paper'). Программа только делает то, что вы говорите. Вы не можете позвонить getWinner() без параметров и ожидать результата.

Во-вторых, нет смысла использовать переменную winner внутри той же функции. Вы буквально не используете его вообще, кроме как вернуть его, если нет победителя. Это противоречиво.

В-третьих, вы никогда не определяете playerMove и computerMove в функции playToFive(), и вы никогда не назначаете им значение.

Отладка и проверка вашего кода помогут вам легко справиться с этими фактами.

0

Ваш скрипт сбой на этой линии:

console.log("Player chose " + playerMove + " while computer chose " + computerMove); 

внутри playToFive функции(), потому что playerMove и computerMove переменные не определены, но вы пытаетесь бросить его в строку. Перед использованием необходимо определить переменные.

Это является причиной для «playerMove неопределенными» ошибка, но и вы должны проверить логику вашей программы, как это было сказано ранее, Брет и Ivern

Смежные вопросы