2016-01-17 141 views
0

该程序将提供三种路线选择,然后询问有关装备,鞋子和宠物的信息。在全部选中后,我使用switch()声明根据用户的选择给出相应的答案。Codecademy上的JavaScript控制流程编程

问题是响应始终是我对if()条件的响应,这意味着如果条件未满足,它仍会记录相同的响应。

这是Code Academy的练习;该网站说我已经完成了该计划的要求,但当然,由于结果不对,我想我会寻求帮助。感谢所有提前帮助的人。 :)

var user = prompt("Your path diverges to three roads, which one will you take?", "Forest, Mountain or Sea?").toUpperCase(); 
var gear = ["Oxygen tank", "Fire Starter", "Camp"] 
var askGear = prompt("Choose your gear:", gear[0] + ", " + gear[1] + " or " + gear[2]).toUpperCase(); 
var shoes = ["Swimfin", "Studded", "BearPaw"] 
var askShoes = prompt("Choose your shoes:", shoes[0] + ", " + shoes[1] + " or " + shoes[2]).toUpperCase(); 
var pet = ["Monkey", "Wolf", "Whale"] 
var askPet = prompt("Choose your pet:", pet[0] + ", " + pet[1] + " or " + pet[2]).toUpperCase(); 
var choiceBank = [askGear, askShoes, askPet] 
var choices = confirm("You chose to take " + askShoes + " shoes, " + askGear + " and a " + askPet + " to your adventure in the " + user + ". Are you ready to go?") 
var choiceConfirm = confirm("This is your final chance, you sure?") 

switch(user) { 
    case "FOREST": { 
     if (choiceBank[0] = 'CAMP' || 'FIRE STARTER', choiceBank[1] = 'BEARPAW', choiceBank[2] = 'WOLF' || 'MONKEY') { 
      console.log("Congratulations! With those right supplies you chose, you survived to live another day!") 
     } else { 
      console.log("Really? You though you could survive with those supplies?") 
     } 
    } 
     break; 
    case "MOUNTAIN": { 
     if (choiceBank[0] = 'CAMP' || 'FIRE STARTER', choiceBank[1] = 'STUDDED', choiceBank[2] = 'WOLF') { 
      console.log("Wow! You're a survival expert!") 
     } else { 
      console.log("Really? You though you could survive with those supplies?") 
     } 
    } 
     break; 
    case "SEA": { 
     if (choiceBank[0] = 'OXYGEN TANK', choiceBank[1] = 'SWIMFIN', choiceBank[2] = 'WHALE') { 
      console.log("Congratulations on choosing well, you survived to live another day!") 
     } else { 
      console.log("Really? You though you could survive with those supplies?") 
     } 
    } 
     break; 
    default: { 
     console.log("Sorry, one of the responses was invalid, please try again.") 
     } 
} 
+1

你的'如果(choiceBank [0] = 'CAMP' || 'FIRE起动机',choiceBank [1] ='BEARPAW',choiceBank [2] ='WOLF'||'MONKEY'){'有意义。逗号''应该做些什么?这个任务应该做什么,或者'||'应该做什么? –

+0

逗号应该添加另一个条件,如果选择了任何一个元素,则该条件应该使条件成立。 –

+1

但这不是JavaScript。并且是'&&',优先级在前或'||',所以任何或者必须在括号中。 –

回答

2

发生了什么变化:

  • var块,现在紧凑,分离
  • statements;
  • case块分离不需要多余的{}
  • if改变到一些更有意义的。

原始代码

if (choiceBank[0] = 'CAMP' || 'FIRE STARTER', 
    choiceBank[1] = 'BEARPAW', 
    choiceBank[2] = 'WOLF' || 'MONKEY') { 
//    ^ ^^ 
//  assignment  or and comma 

改为

if ((choiceBank[0] === 'CAMP' || choiceBank[0] === 'FIRE STARTER') && 
    choiceBank[1] === 'BEARPAW' && 
    (choiceBank[2] === 'WOLF' || choiceBank[2] === 'MONKEY')) { 

choiceBank[0] = 'CAMP'是赋值,但我们需要choiceBank[0] === 'CAMP''FIRE STARTER'相同的比较。这应该是'CAMP'选择的替代选择。这是通过logical or||来实现的。 ,被替换为&&。尽管的优先级小于,但需要括号。

  • 微小的变化:增加了用于输出的,而不是console.log

var user = prompt("Your path diverges to three roads, which one will you take?", "Forest, Mountain or Sea?").toUpperCase(), 
 
    gear = ["Oxygen tank", "Fire Starter", "Camp"], 
 
    askGear = prompt("Choose your gear:", gear[0] + ", " + gear[1] + " or " + gear[2]).toUpperCase(), 
 
    shoes = ["Swimfin", "Studded", "BearPaw"], 
 
    askShoes = prompt("Choose your shoes:", shoes[0] + ", " + shoes[1] + " or " + shoes[2]).toUpperCase(), 
 
    pet = ["Monkey", "Wolf", "Whale"], 
 
    askPet = prompt("Choose your pet:", pet[0] + ", " + pet[1] + " or " + pet[2]).toUpperCase(), 
 
    choiceBank = [askGear, askShoes, askPet], 
 
    choices = confirm("You chose to take " + askShoes + " shoes, " + askGear + " and a " + askPet + " to your adventure in the " + user + ". Are you ready to go?"), 
 
    choiceConfirm = confirm("This is your final chance, you sure?"); 
 

 
switch (user) { 
 
    case "FOREST": 
 
     if ((choiceBank[0] === 'CAMP' || choiceBank[0] === 'FIRE STARTER') && choiceBank[1] === 'BEARPAW' && (choiceBank[2] === 'WOLF' || choiceBank[2] === 'MONKEY')) { 
 
      out("Congratulations! With those right supplies you chose, you survived to live another day!"); 
 
     } else { 
 
      out("Really? You though you could survive with those supplies?"); 
 
     } 
 
     break; 
 
    case "MOUNTAIN": 
 
     if ((choiceBank[0] === 'CAMP' || choiceBank[0] === 'FIRE STARTER') && choiceBank[1] === 'STUDDED' && choiceBank[2] === 'WOLF') { 
 
      out("Wow! You're a survival expert!"); 
 
     } else { 
 
      out("Really? You though you could survive with those supplies?"); 
 
     } 
 
     break; 
 
    case "SEA": 
 
     if (choiceBank[0] === 'OXYGEN TANK' && choiceBank[1] === 'SWIMFIN' && choiceBank[2] === 'WHALE') { 
 
      out("Congratulations on choosing well, you survived to live another day!"); 
 
     } else { 
 
      out("Really? You though you could survive with those supplies?"); 
 
     } 
 
     break; 
 
    default: 
 
     out("Sorry, one of the responses was invalid, please try again."); 
 
} 
 

 
function out(s) { 
 
    var node = document.createElement('div'); 
 
    node.innerHTML = s + '<br>'; 
 
    document.getElementById('out').appendChild(node); 
 
}
<div id="out"></div>

+0

建议添加一些解释,说明原始的块是否做了解释,说明它们错误的原因。 – Krease

+0

@Chris,请参阅编辑。 –

+0

非常感谢Nina!还有一件事,你能帮我理解最后的“功能(s,pre)”块吗? 'pre'和'.appendChild(node)'是什么? –