Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 我的while循环接受它不应该接受的答案';T为什么?_Javascript_Loops - Fatal编程技术网

Javascript 我的while循环接受它不应该接受的答案';T为什么?

Javascript 我的while循环接受它不应该接受的答案';T为什么?,javascript,loops,Javascript,Loops,我有一个while循环无法正常工作,无法找到问题。例如,我可以输入一个“L”,它不会启动循环。有人看到我的问题了吗 <script> var wood = prompt("Enter wood type (M)ahogany, (O)ak, (P)ine"); while (wood != "M" && wood != "m" && wood != "O" && wood != "o" && wood != "

我有一个while循环无法正常工作,无法找到问题。例如,我可以输入一个“L”,它不会启动循环。有人看到我的问题了吗


<script>
var wood = prompt("Enter wood type (M)ahogany, (O)ak, (P)ine");
    while (wood != "M" && wood != "m" && wood != "O" && wood != "o" && wood != "P" && wood != "p" && wood == "")
    {
        wood = prompt("invalid wood please enter (M)ahogany, (O)ak, (P)ine ");
    }
</script>

var wood=提示(“输入木材类型(M)ahogany,(O)ak,(P)ine”);
而(wood!=“M”&&wood!=“M”&&wood!=“O”&&wood!=“O”&&wood!=“P”&&wood!=“P”&&wood=”)
{
wood=提示(“无效的wood请输入(M)ahogany,(O)ak,(P)ine”);
}
&&wood==”
。。。仅当
wood
为空时才为true,因此在条件中传递的唯一值是空字符串

你可以把它改成

while ((wood != "M" && wood != "m" && wood != "O" && wood != "o" && wood != "P" && wood != "p") || (wood == "")) { ...
或者通过使用
字符串来简化它。包括

var woods = "MOP";
var wood  = prompt("Enter wood type (M)ahogany, (O)ak, (P)ine");

while (!( wood && woods.includes(wood.toUpperCase()) )) {
  wood = prompt("invalid wood please enter (M)ahogany, (O)ak, (P)ine ");
}

如上所述,您需要将空字符串改为“OR”而不是“AND”

不过,我可能会写得更可读一些,比如

let woods = ['M','O','P'];
while (!wood || !woods.includes(wood.toUpperCase()))
这样,您就不需要将一系列不同的变体链接起来。只需将其放入数组中一次,并将输入中的任何内容都设置为大写

希望这有帮助