在JavaScript中验证来自提示符的用户输入

在JavaScript中验证来自提示符的用户输入,javascript,validation,input,Javascript,Validation,Input,因此,我从Codecademy扩展了rock/paper/scissors JS游戏以验证用户输入,但当用户插入除“rock”、“paper”或“scissors”以外的内容时,我无法让程序继续要求正确的用户输入 var userChoice; userChoice = prompt('Do you choose rock, paper, or scissors?'); console.log('User choice: ' + userChoice); if (userChoice !==

因此,我从Codecademy扩展了rock/paper/scissors JS游戏以验证用户输入,但当用户插入除“rock”、“paper”或“scissors”以外的内容时,我无法让程序继续要求正确的用户输入

var userChoice;

userChoice = prompt('Do you choose rock, paper, or scissors?');
console.log('User choice: ' + userChoice);

if (userChoice !== 'rock' && userChoice !== 'paper' && userChoice !== 'scissors') {
    userChoice = prompt('Select again.');
} else if (userChoice === computerChoice) {
    userChoice = prompt('It\'s a tie! Pick again.');
    console.log('New user choice: ' + userChoice);
}

//computer random choice
var computerChoice = Math.random();
console.log('Computer random number: ' + computerChoice);

// assign rock, paper, scissors values
if (computerChoice <= 0.33) {
    computerChoice = 'rock';
} else if (computerChoice <= 0.67) {
    computerChoice = 'paper';
} else {
    computerChoice = 'scissors';
}

console.log('Computer choice: ' + computerChoice);

// compare user and computer choices
var compare = function(choice1, choice2) {
    if (choice1 === 'rock') {
        if (choice2 === 'scissors') {
            return 'Rock wins!';
        } else {
            return 'Paper wins!';
        }
    } else if (choice1 === 'scissors') {
        if (choice2 === 'rock') {
            return 'Rock wins!';
        } else {
            return 'Scissors win!';
        }
    } else if (choice1 === 'paper') {
        if (choice2 === 'rock') {
            return 'Paper wins!';
        } else {
            return 'Scissors win!';
        }
    }
};

console.log(compare(userChoice, computerChoice));
var用户选择;
userChoice=prompt('您选择石头、布还是剪刀?');
log('User-choice:'+userChoice);
如果(userChoice!=='rock'&&userChoice!=='paper'&&userChoice!=='剪刀〕){
userChoice=prompt('再次选择');
}else if(userChoice==computerChoice){
userChoice=prompt('打成平局!再次拾取');
log('newuserchoice:'+userChoice);
}
//计算机随机选择
var computerChoice=Math.random();
console.log('计算机随机数:'+计算机选择);
//指定石头、布、剪刀的值

如果(computerChoice您的代码有一些问题。要解决第一个问题,您可以执行以下操作:

var userChoice;

userChoice = prompt('Do you choose rock, paper, or scissors?');
console.log('User choice: ' + userChoice);

while (userChoice !== 'rock' && userChoice !== 'paper' && userChoice !== 'scissors') {
    userChoice = prompt('Select again.');
} 
但是,第二部分仍然存在问题:

if (userChoice === computerChoice) {
    userChoice = prompt('It\'s a tie! Pick again.');
    console.log('New user choice: ' + userChoice);
}
此代码永远不会触发,因为您在进行比较后计算了
computerChoice
。您应该将此代码移动到
compare
功能中:

var compare = function(choice1, choice2) {
    if (choice1 === choice2) {
        return 'It\'s a tie!';
    } else if (choice1 === 'rock') {
        if (choice2 === 'scissors') {
            return 'Rock wins!';
        } else {
            return 'Paper wins!';
        }
    } else if (choice1 === 'scissors') {
        if (choice2 === 'rock') {
            return 'Rock wins!';
        } else {
            return 'Scissors win!';
        }
    } else if (choice1 === 'paper') {
        if (choice2 === 'rock') {
            return 'Paper wins!';
        } else {
            return 'Scissors win!';
        }
    }
};

运行
userChoice=prompt('再次选择');
后,您只需继续完成其余的代码执行。您需要的是某种循环条件,检查他们是否输入了有效的输入,并且只允许代码在有效后继续。 (提示:“循环”)

尝试以下方法:

//to do
// after it is a tie, making the same choice doesn't do anything?
// keep on prompting if incorrect input again

// take user input
var userChoice;

userChoice = prompt('Do you choose rock, paper, or scissors?');
console.log('User choice: ' + userChoice);

var valid = false;

//computer random choice
var computerChoice = Math.random();
console.log('Computer random number: ' + computerChoice);

// assign rock, paper, scissors values
if (computerChoice <= 0.33) {
    computerChoice = 'rock';
} else if (computerChoice <= 0.67) {
    computerChoice = 'paper';
} else {
    computerChoice = 'scissors';
}

while (!valid) {
    if (userChoice !== 'rock' && userChoice !== 'paper' && userChoice !== 'scissors') {
        userChoice = prompt('Select again.');
    } else if (userChoice === computerChoice) {
        userChoice = prompt('It\'s a tie! Pick again.');
        //computer random choice
        var computerChoice = Math.random();
        console.log('Computer random number: ' + computerChoice);

        // assign rock, paper, scissors values
        if (computerChoice <= 0.33) {
            computerChoice = 'rock';
        } else if (computerChoice <= 0.67) {
            computerChoice = 'paper';
        } else {
            computerChoice = 'scissors';
        }
        console.log('New user choice: ' + userChoice);
    } else {
     valid = true;
    }
}


console.log('Computer choice: ' + computerChoice);

// compare user and computer choices
var compare = function(choice1, choice2) {
    if (choice1 === 'rock') {
        if (choice2 === 'scissors') {
            return 'Rock wins!';
        } else {
            return 'Paper wins!';
        }
    } else if (choice1 === 'scissors') {
        if (choice2 === 'rock') {
            return 'Rock wins!';
        } else {
            return 'Scissors win!';
        }
    } else if (choice1 === 'paper') {
        if (choice2 === 'rock') {
            return 'Paper wins!';
        } else {
            return 'Scissors win!';
        }
    }
};

console.log(compare(userChoice, computerChoice));
//要做的事
//打成平局后,做出同样的选择没有任何作用?
//如果再次输入错误,则继续提示
//接受用户输入
var用户选择;
userChoice=prompt('您选择石头、布还是剪刀?');
log('User-choice:'+userChoice);
var-valid=false;
//计算机随机选择
var computerChoice=Math.random();
console.log('计算机随机数:'+计算机选择);
//指定石头、布、剪刀的值
如果(计算机选择)
它不工作,控制台日志未定义

问题是,函数
compare()
中缺少
return
语句:

var compare=函数(选项1,选项2){
如果{
...
}

return“oops!!”;//非常感谢!代码中的
while
循环缺少一个右括号,最后一个
else if
比较有拼写错误。修复了这个问题后,我发现
while
循环中的领带检查没有正常工作(不会再次提示用户输入).我们遗漏了什么?它实际上遗漏了
valid=true;
语句以在
的同时打破
循环,从我所能看到的情况来看,对tie的检查仍然与以前一样:/…这是一个测试,您通过了…我确实忘记了valid=true语句。您对tie condi的实现tion正在我的终端上工作,提示会一直给出,直到用户输入一个不是平局的有效条目,如果不是,您希望的输出是什么?缺少最终的
console.log(比较(userChoice,computerChoice))
line.如果你还有问题,让我知道啊,我明白你的意思了,问题是电脑的选择应该在用户输入他们的选择之前确定。每次比赛结果是平局,玩家和电脑都应该选择不同的答案(就像实际的石头剪刀一样)。请查看我的最新编辑,并注意,您可以将确定计算机答案的协议抽象为一个单独的函数,因为您多次调用它。非常感谢eddy!在
compare
函数中添加对tie的检查这样做不会再次提示用户输入,它只会记录它是与conso的tie另外,我运行了几次程序,注意到只有
循环在适当的位置,我的代码中的领带检查确实运行了。哦,有趣…很高兴你让它工作了:)
var compare = function(choice1, choice2) {
    if {
      ...
    }
    return "oops !!"; //<-- missing
};