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;
]