Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这个JS代码中缺少什么使其循环_Javascript - Fatal编程技术网

Javascript 这个JS代码中缺少什么使其循环

Javascript 这个JS代码中缺少什么使其循环,javascript,Javascript,当提示输入出现错误时,此基本代码缺少什么使其循环 var userChoice = prompt("Do you choose rock, paper or scissors?"); var error = "Error. You should input rock, paper or scissors!"; var inputAgain = "Do you choose rock, paper or scissors?"; if(userChoice!=="rock") {

当提示输入出现错误时,此基本代码缺少什么使其循环

var userChoice = prompt("Do you choose rock, paper or scissors?");
var error = "Error. You should input rock, paper or scissors!";
var inputAgain = "Do you choose rock, paper or scissors?";
    if(userChoice!=="rock") {
        if(userChoice!=="paper") {
            if(userChoice!=="scissors") {
                confirm(error);
                userChoice = prompt("Do you choose rock, paper or scissors?");
            }
        }
    }
var requiredValues=[“石头”、“布”、“剪刀”];

while(requiredValues.indexOf(prompt(“您选择石头、布还是剪刀?”)您的代码需要一个循环,以便继续询问和回答问题

var options = ["rock","paper","scissors"],
    userChoice;

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

    // stop asking if answer is valid
    if (options.indexOf(userChoice.trim().toLowerCase()) >= 0) break;

    // otherwise, inform user of error and continue asking
    confirm("Error. You should input rock, paper or scissors!");
}
试试这个

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

    // click prompt cancel
    if(userChoice === null){
        return;
    }

    // input is correct
    if(userChoice === "rock" || userChoice === "paper" || userChoice === "scissors"){
        return;
    }

    // click confirm cancel
    if(confirm("Error. You should input rock, paper or scissors!") === false){
        return;
    }

    // ask again
    funcAskUserChoice();
}

// start loop
funcAskUserChoice();

我很惊讶编译器没有再次检测变量名
部分
inputAgain
,并发现您希望它执行循环

无论如何,递归通常是循环的好方法

function keep_asking() {
    var userChoice = prompt("Do you choose rock, paper or scissors?");
    var error = "Error. You should input rock, paper or scissors!";
    if(userChoice!=="rock") {
        if(userChoice!=="paper") {
            if(userChoice!=="scissors") {
                confirm(error);
                return keep_asking();
            }
        }
    }
    return userChoice;
]

在ES6中有尾部递归,所以这样做是“免费的”.

您需要添加一个外部循环,以便在满足某些成功标准之前,它将继续循环。A..loop丢失。@JaredFarrish您是否建议具有相同消息的两个提示具有循环的外观?这就像一个人可以编写的最差代码……不可读,每次都会创建一个新的数组实例,甚至不会对那里的评论…@Derek朕會功夫 这段代码(在前一段代码中编写)并没有那么糟糕,尽管我将提示与可读性条件分开就任何性能影响而言,这都是完全不相关的。虽然做出了一些糟糕的选择,但这甚至还没有达到我在本网站的一些答案中看到的前50个最差的代码示例。如果您将提示符(…)指定给变量,那么我们可以在循环后使用结果…即
requiredValues.indexOf(userChoice=prompt(“你选择石头、布还是剪刀?”)
同意Jared的观点,事实上这相当简洁,提高了可读性。将此3行程序与brunt的答案进行比较,你会知道在四分之一的时间内发生了什么。此外,通过在数组中生成可能的值,它增加了在需要更多值时的可伸缩性(例如,
炸弹
射线枪
原子弹
)。我要补充的是,br3nt增加了更多,但他也在上面,分配结果。不太喜欢
do..while
更愿意将其视为
while
,特别是因为您已将ask_question初始化为一个值,该值至少会使循环执行一次。我还将
添加到lowercase()
trim()
作为减少用户错误的最低预防措施同上…lol。尽管
的目的是循环至少一次。在这种情况下,我们想询问石头、布、剪刀至少一次。我还想将我们的条件提取到一个单独的方法中。仍然这么说,因为您的初始条件总是要计算为
true
,您不需要额外标记
do
,只需将
放置在顶部即可
function keep_asking() {
    var userChoice = prompt("Do you choose rock, paper or scissors?");
    var error = "Error. You should input rock, paper or scissors!";
    if(userChoice!=="rock") {
        if(userChoice!=="paper") {
            if(userChoice!=="scissors") {
                confirm(error);
                return keep_asking();
            }
        }
    }
    return userChoice;
]