【问题标题】:how do i loop back to the prompt if answer is incorrect javascript如果答案不正确,我如何循环回到提示符 javascript
【发布时间】:2016-11-15 09:50:25
【问题描述】:

对于 JavaScript 来说相当新,如果用户输入错误的答案,我如何循环回到提示问题,并且我希望问题重复,直到他们得到正确的答案。

<html>

<head>
    <script>
    </script>
    <title> Javascript program</title>
</head>

<body>
    <script>
        var company = (prompt("What the name of the company that developed the javascript language?", ""));
        if (company == 'netscape') {
            alert("correct answer!");

        } else {
            alert("wrong answer");

        }
    </script>
</body>

</html>

【问题讨论】:

  • 看看while 循环。顺便说一句,如果有人输入 Netscape 而不是 netscape,会发生什么。
  • 要添加到答案中,您还可以使用 do while 循环 as shown here

标签: javascript


【解决方案1】:

您可以使用while 循环并永远循环,直到您的条件为true,然后使用break 语句退出循环。

基本上,您可以选择检查条件的循环first

while (condition) {
    // code
}

稍后

检查条件的循环
do {
    // code
} while (condition);

中间的解决方案

while (true) {
    // code
    if (condition) break;
    // code
}

或递归解决方案,例如

function fn() {
    // code
    if (condition) {
        // code
        return
    }
    fn(); // call fn again
}        

但我建议使用迭代方法,直到值满足条件。

var company;

while (true) {
    company = prompt("What the name of the company that developed the javascript language?", "");
    if (company === 'netscape') {
        break;
    }
    alert("wrong answer");
}
alert("correct answer!");

【讨论】:

    【解决方案2】:

    您可以将您的代码包装在一个函数中,并在不正确的值上调用 self。

    var max_count = 5;
    
    function showConfirm() {
      var company = (prompt("What the name of the company that developed the javascript language?", ""));
      if (company == 'netscape') {
        alert("correct answer!");
      } else {
        alert("wrong answer");
        // to limit user for limited count
        if (--max_count > 0)
          showConfirm()
      }
    }
    showConfirm();

    【讨论】:

      【解决方案3】:

      你可以像这样使用循环:

      let question = "What is the name of the company that developed the javascript language?",
          defaultAnswer = "stackoverflow",
          correctAnswer = "netscape";
      
      while(prompt(question, defaultAnswer) !== correctAnswer) alert("Wrong answer")
      alert("Correct answer");
      

      或者您可以使用递归,请参阅 Rajesh 的回答。

      【讨论】:

        【解决方案4】:

        连续显示提示可能会令人讨厌,并且用户始终可以在 Chrome 中选择阻止页面创建更多对话。如果您使用带有while(true) 的循环并且用户选择阻止对话是出于恼怒,那么您的页面可能最终处于挂起状态。我建议使用计数器询问特定时间的问题,然后再假设答案错误,如下面的代码所示

        function askQuestion() {
            return prompt("What the name of the company that developed the javascript language?", "");
        }
        
        var counter = 0;
        var correctAnswer = false;
        while(!correctAnswer && counter < 10) {
        
            counter++;
            correctAnswer = askQuestion() === 'netscape';
        
            if (!correctAnswer) {
                alert("wrong");
            }
        }
        
        if (correctAnswer) {
            alert("correct");
        } else {
            alert("sorry after 10 attempts answer is still wrong");
        }
        

        你也可以查看这个plnkr链接https://plnkr.co/edit/IbUFRC0HepfSHlvNqMzM?p=preview

        【讨论】:

          【解决方案5】:

          你需要把函数本身包含进去,直到满足要求并返回(退出函数);

          ask();
          function ask(){
              var answer=prompt("Question..?");
              if(answer=="netscape"){
                  alert("correct");
                  return;
              }
              alert("wrong answer");
              ask();  
          }
          

          【讨论】:

          • 你不需要elseask()应该在定义之后。
          • 是的,没有 else 块就更整洁了
          猜你喜欢
          • 2020-08-13
          • 1970-01-01
          • 1970-01-01
          • 2019-06-30
          • 2020-11-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多