繁体   English   中英

我做了一个无限循环,似乎无法弄清楚我做错了什么

[英]I've made an infinite loop and can't seem to figure out what I did wrong

我正在为一个简单的奇偶游戏编写程序,但我似乎无法弄清楚我的 while 循环有什么问题。

这样做的目的是,当用户没有输入赔率、赔率、偶数或偶数时,会出现警报,说“请输入赔率或偶数”。

但是,每当我运行代码时,它都会变成一个无限循环,重复警报,无论我输入什么。即使它是我想要的正确响应。

var oddEven = prompt('Would you like to be odds or evens?', 'Odds') 
while (oddEven != 'odds' || oddEven != 'Odds' || oddEven != 'evens' || oddEven != 'Evens') {
    oddEven = prompt('Please enter either odds or evens');

}

我对编程很陌生,几个月前才开始学习,所以任何建议都将不胜感激。

谢谢您的帮助:)

所以这是一个或,任何满足甚至一个的条件,都将评估为真。 所以如果我输入'boo',oddEven,='boo'。 因此 rest 评估为真。 更好的方法是

while (oddEven in ['odds', 'Odds' ...]): 
    oddEven = prompt('Please enter either odds or evens')

想象一个用户输入"Odds" ,你的if语句会发生什么?

oddEven != 'odds'是假的,但我们仍然需要检查其他的! 我们需要检查其他的,因为你已经写了|| 这意味着“或” - javascript 将继续执行每个语句,直到其中一个为真。

oddEven != 'Odds'是真的。 因为它是真的,你的 while 循环会立即继续,再次因为你使用了|| - 如果任何语句为真,代码将停止检查语句并继续循环。

有很多方法可以解决这个问题,但我认为以下方法最适合与您陷入困境的方式进行比较:

var oddEven = prompt('Would you like to be odds or evens?', 'Odds') 
while (
    !(oddEven == 'odds' || oddEven == 'Odds' || oddEven == 'evens' || oddEven == 'Evens')
) {
    oddEven = prompt('Please enter either odds or evens');
}

现在在我们的示例中, oddEven == 'Odds'为真,但因为整个部分都被 bang 否定了! 一开始,我们采取了相反的做法,太错误了。

一种更整洁的方法可能如下:

var oddEven = prompt('Would you like to be odds or evens?', 'Odds') 
while (!['odds', 'Odds', 'evens', 'Evens'].includes(oddEven)) {
    oddEven = prompt('Please enter either odds or evens');
}

这表示“虽然这个输入列表不包括oddEven ”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM