在JavaScript中检查两个字符串是否相等是不正确的

vhmi4jdf  于 2023-04-10  发布在  Java
关注(0)|答案(4)|浏览(115)
function playerSelection() {
     let choice = prompt("Enter you choice.");
     while(choice != "rock" && choice != "paper" && choice != "scissor"){
        alert("Wrong entry");
        playerSelection();
     }
return choice;
   }

这段代码在你输入一个使while循环条件为真的字符串之前都能正常工作。一旦它在一个不正确的输入之后进入while循环,并提示你输入另一个字符串,即使你输入了一个正确的字符串,它也会一直显示“错误输入”警报,并显示提示,直到你重新加载页面。这是怎么回事?
我试着操作逻辑运算符,但似乎没有帮助。我的猜测是它与递归有关,但我不知道它是什么。

llew8vvj

llew8vvj1#

你不需要再次调用这个函数。“prompt”-方法已经做了你想做的事情(我猜的)。这样做吧:

function playerSelection(){
    let choice;
    do{
        choice = prompt("Enter your choice: ");
        if(choice != "rock" && choice != "paper" && choice != "scissor"){
            alert("Wrong entry!");
        }
    }while(choice != "rock" && choice != "paper" && choice != "scissor");
    return choice;
}
quhf5bfb

quhf5bfb2#

你的变量应该在函数之前声明如下:

let choice;
            function playerSelection(){
            choice = prompt("Enter your choice.");
            while(choice != "rock" && choice != "paper" && choice != "scissor"){
                alert("Wrong entry");
                playerSelection();
            }
            return choice;
            }

            let result = playerSelection();
            alert("result = " + result);
zte4gxcn

zte4gxcn3#

这是因为每一个对playerSelection()的新调用都会创建一个新的调用上下文,它存储了自己的局部变量和参数。

playerSelection() {
    let choice = prompt('Enter your choice:')

    while (choice != 'rock' && choice != 'paper' && choice != 'scissors') {
        alert('Wrong entry')
        choice = prompt('Enter your choice:')
    }

    return choice
}

或者如果你想用递归

playerSelection() {
    let choice = prompt('Enter your choice:')

    if (choice == 'rock' || choice == 'paper' || choice == 'scissors') {
        return choice
    } else {
        alert('wrong entry')
        return playerSelection()
    }
}
yvgpqqbh

yvgpqqbh4#

playerSelection()函数的问题是它递归地调用自己,而不给用户输入有效选择的机会。返回choice语句永远不会到达,因为函数一直调用自己,直到用户输入有效选择。
下面是playerSelection()函数的修正版本,它应该可以按预期工作:

function playerSelection() {
  let choice;
  do {
    choice = prompt("Enter your choice (rock, paper, or scissors):").toLowerCase();
    if (choice !== "rock" && choice !== "paper" && choice !== "scissors") {
      alert("Invalid choice. Please choose 'rock', 'paper', or 'scissors'.");
    }
  } while (choice !== "rock" && choice !== "paper" && choice !== "scissors");
  return choice;
}

相关问题