2015-07-25 5 views
-1

Итак, я построил игрушку для каменной бумаги на codecademy и настраивал ее. Дело в том, что когда пользователь пишет неправильный выбор, код останавливается.Javascript Codeacademy query

Все работало, но когда я пишу «камень, бумага или ножница», он все еще говорит о неуместном выборе.

var userChoice = prompt("Do you choose rock, paper or scissors?"); 
    //tweaking starts here 
    if (userChoice!=="rock") { 
     console.log("inappropriate choice"); 
    } 
    else if (userChoice!=="paper") { 
     console.log("inappropriate choice"); 
    } 
    else if (userChoice!=="scissors") { 
     console.log("inappropriate choice"); 
    }; 
    // tweaking ends here 

    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 === "rock") { 
       return "rock wins"; 
      } 
      else { 
       return "scissors wins"; 
      } 
     };  
    };  
     compare(userChoice,computerChoice); 

<!-- end snippet --> 

ответ

2

Это классическая проблема if else if лестницы.

Как уже упоминалось в Java Tutorial here

Однако, как только условие выполнено, то соответствующие операторы выполняются [...], а остальные условия не оцениваются.

В вашем случае, когда вы вводите «бумагу» или «ножницу», она разрывается в первой ветке как userChoice != "rock". Если вы входите в «рок», он разрывается во второй ветви как userChoice != "paper".

В конечном счете, он не проходит через лестницу if-else-if и в конечном итоге печатает неподходящее сообщение о выборе.

Для того, чтобы подтвердить ввод, так что пользователь не входит ничего, кроме строк, «рок», «бумага» или «ножницы», изменить код Tweaking следующим образом:

//tweaking starts here 
if (userChoice!=="rock" && userChoice!=="paper" && userChoice!=="scissors"){ 
    console.log("inappropriate choice"); 
} 
}; // tweaking ends here 

Всегда помните:

Только одна ветка лестницы выполняется ... !!! В случае, если выполнены несколько условий , первая ветвь, встречающаяся в одиночку, должна быть выполнена .

+0

Я не вход «рок, бумаги или ножницы». Я вхожу только в одну из этих вещей. – Lavios

+1

Спасибо! Этот код работал! Я только начал изучать javascript, и я не знал, можем ли мы использовать несколько условий в одном выражении if, но он все равно не прекращает код, если он является неуместным выбором. Я просто поместил остальную часть кода в оператор else и это сработало. :) – Lavios

0

Вот пример, который может помочь вам увидеть, как ваш, если заявление логика неверна:

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

if ((userChoice != "rock") && (userChoice != "paper") && (userChoice != "scissors")) { 
    console.log("inappropriate choice"); 
} else { 
    console.log("appropriate choice!"); 
} 

Вот JSFiddle: https://jsfiddle.net/j66to3x0/2/

+0

Я не хочу, чтобы он сказал подходящий выбор. Он должен сказать неправильный выбор и завершить код там. – Lavios

+0

Я только добавил это для ясности. Вы можете просто удалить else. – j3py

+0

-1, это неправильный код! '(« rock »||« paper »« scissors »)' будет оцениваться сначала, фактически становясь «рок», поэтому это проверяет, был ли введен «рок» или что-то еще. (попробуйте бумагу -> неверно) – doldt