2015-04-30 3 views
-1

Я изучаю Javascript от Codecademy, и я работал над дополнительными проблемами, чтобы посмотреть, смогу ли я их сделать. В настоящее время я работаю над игрой для ножниц для рок-бумаги, и я пытался заставить ее вытащить ошибку, если пользователь поставил опцию, отличную от камней, бумаги или ножниц. Мне удалось заставить его вытащить сообщение об ошибке, но скрипт будет продолжать работать, и компьютер по-прежнему будет выбирать один из трех.Как бы остановить Javascript, если он не соответствует определенному условию?

Как я могу заставить программу остановиться, если пользователь вводит что-то другое, кроме каменной бумаги или ножниц, и возвращает сообщение об ошибке вместо того, чтобы возвращать сообщение, а затем продолжает отображать выбор компьютера?

var userChoice = prompt("Do you choose rock, paper or scissors?"); 

if (userChoice !== "rock" || "scissors" || "paper") { 
    console.log("That is not one of the options"); 
} 

var computerChoice = Math.random(); 
if (computerChoice < 0.34) { 
    computerChoice = "rock"; 
} else if(computerChoice <= 0.67) { 
    computerChoice = "paper"; 
} else { 
    computerChoice = "scissors"; 
} console.log("Computer: " + computerChoice); 


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

compare(userChoice, computerChoice) 
+1

'return false'. –

+0

Вы не можете сравнивать такую ​​переменную, как, кстати, –

+2

'' (userChoice! == "rock" || "scissors" || "paper") '' должно быть '' (userChoice! == "rock" && userChoice! == "scissors" && userChoice! == "paper") '' –

ответ

0

Если инструкция if находится внутри функции, используйте return false; в конце инструкции if.

Если оператор if находится за пределами функции, оставьте оставшуюся часть кода в предложении else, чтобы он не выполнялся, если начальное условие выполнено успешно.

+0

Все было отлично. Я пытался вернуть ложь, но он все время давал мне ошибки. Я понял, что это не функция. как только я добавил условие else, он исправил его отлично. Огромное спасибо. – Ryan

0

Вставьте его в функцию и верните в случае ошибки.

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

var game = function() { 
    var userChoice = prompt("Do you choose rock, paper or scissors?"); 

    if (userChoice !== "rock" || "scissors" || "paper") { 
     console.log("That is not one of the options"); 
     return; 
    } 

    var computerChoice = Math.random(); 
    if (computerChoice < 0.34) { 
     computerChoice = "rock"; 
    } else if(computerChoice <= 0.67) { 
     computerChoice = "paper"; 
    } else { 
     computerChoice = "scissors"; 
    } 
    console.log("Computer: " + computerChoice); 
    compare(userChoice, computerChoice); 
} 

game(); 
+2

Не могли бы вы дать краткий пример того, о чем вы говорите? –

3

Метод 1

if (userChoice !== "rock" && userChoice !== "scissors" && userChoice !== "paper") { 
    console.log("That is not one of the options"); 
    return false; 
} 

Метод 2

switch(userChoice) 
{ 
    case 'rock': break; 
    case 'scissors': break; 
    case 'paper': break; 
    default: { 
    console.log(userChoice + "That is not one of the options"); 
    return false; 
    } 
} 

работает здесь jsfiddle: enter link description here

+2

'' && '', а не '' || '' –

+0

Я попробовал его с && и || оба возвращены с незаконным заявлением о возврате – Ryan

0

Вы можете использовать исключение, как показано здесь: Is it possible to stop JavaScript execution?

В основном, после вас вызовет сообщение об ошибке, сделайте следующее:

throw new Error("Your Error Message!"); 

Хотя что бы закончить всю игру, которая не рекомендуется для опечатки со стороны пользователя. Это фактически остановило бы программу.

+0

Что было бы хорошим способом сделать этот пользователь дружественным? – Ryan

+0

Я бы пошел с ответом @ Fals и снова задал вопрос, пока пользователь не поправит его. – TheInnerParty

+0

Когда я попробовал это, он дал мне сообщение, в котором говорилось, что это незаконный оператор возврата. Должна ли быть функция, чтобы делать то, что я хочу, чтобы она делала? Или есть способ сделать это с помощью регулярного оператора if? – Ryan

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