Javascript - Make switch: 默认重启提示

Javascript - Make switch: default restart prompt

我想问用户一个简单的问题:

// Write your code below!
var food = prompt("Do you like waffles?");

switch (food) {
    case "yes":
    case "Yes":
        alert("Good!");
        break;
    case "no":
    case "No":
        alert("But why!");
        break;
    default:
        var food = prompt("That's not an answer, Do you like waffles?");
        break;
}

默认设置有效但仅一次。如果 he/she 输入的答案不是无限地是或否,我想重新提示用户。这是怎么回事?

你没有任何机制来执行循环。尝试用 while 循环包围它。

您需要一种方法来重新评估第二个提示,因为它实际上不会去任何地方。您需要将其分开:

function askMe() {
   var food = prompt("Do you like waffles?");
   switch (food) {
    case "yes":
    case "Yes":
        alert("Good!");
        break;
    case "no":
    case "No":
        alert("But why!");
        break;
    default:
        askMe();

        break;
  }
}

askMe();

function askForFood( questionArgument ){
  var food = prompt( questionArgument );
  switch (food.toLowerCase()) { // be DRY! Use lowercase!
    case "yes":                 // And lowercase it is!
      alert("Good!");
      break;
    case "no":
      alert("But why!");
      break;
    default:
      askForFood("That's not an answer, Do you like waffles?"); // to hell with it
      break;
  }
}

askForFood("Do you like waffles?"); // First time ask nicely

为什么上面的方法有效?
导致使用能够重复工作更多次的function
只需将您的 "Question" 作为参数传递给函数即可。
case default: 使用相同的函数调用,但这次使用不同的问题。

P.S:由于使用了 toLowerCase(),用户也可以编写 "yeS",您的程序将与朋友一起玩球而不用太在意...


如果不是为了学校,你也可以像这样玩你的代码(我喜欢!):

var questionary = {
  "yes" : "Good!",
  "no"  : "But why!",
};

function askForFood( question ){
  var answer = prompt( question ).toLowerCase();
  if(answer in questionary) alert( questionary[answer] ); // Self explanatory
  else askForFood( "That's not an answer" ); // ♫ do it again!
}
askForFood("Do you like waffles?");

我知道您已经收到了有效的答案,但这是 while 循环的完美应用,我看您还没有学会如何使用它们。看看它短了多少!

var food = "Do you like waffles?";
while ((food = window.prompt(food, "yes")) != "yes" && food != "no") {
    food = "That\'s not an answer, do you like waffles?";
}
window.alert("You said " + food + ".");

这就是它的工作原理。

在while这个词之后,有一长行被方括号括起来的代码。这是一个条件。条件说 "if the answer provided isn't yes, and it isn't no" 。只要条件保持为真,while 循环就会重复。

首先,我将变量 food 设置为我要使用的消息。然后,在while循环的条件下,我创建了一个提示:

food = window.prompt(food, "yes")

您会注意到我在这里重用了我的旧食物变量。我不想创建一个新的,所以我重复使用了我的旧的。您会注意到我将提示中的消息设置为 food 变量的先前值。另请注意,为了用户友好,我将默认消息设置为 "yes" .

如果提示的值不等于是或否,它会将食物变量的值设置为我们的第二条消息。然后,它一次又一次地执行 while 循环的条件,直到我们得到是或否的答案。

最后,当用户回答是或否时,while 循环的条件不再为真,因此它跳过 while 循环告诉用户他们的答案。

最好尝试不同的做事方式,看看是否可以缩短代码并提高性能!只要确定你已经明确了要回答什么,否则用户将被无限重复的提示困住并且不知道该做什么,并且按取消也无济于事,因为它不是一个是或否的答案.

您甚至可以进一步改进此代码,方法是检查用户是否按下了“取消”,然后也停止 while 循环。

var food = "Do you like waffles?";
while ((food = window.prompt(food, "yes")) && food != "yes" && food != "no") {
    food = "That\'s not an answer, do you like waffles?";
}
if (!food) {
    window.alert("Aw, you cancelled out!");
} else {
    window.alert("You said " + food + ".");
}

在这里,我改变了while循环中的条件。我们首先检查食物变量是否可以设置为提示!如果不能,那是因为用户必须按下取消。稍后,我们还检查是否设置了 food 变量,因为我们不想告诉用户他们说了什么,如果他们按下取消但什么也没说。