关于while循环中!=与&&、||逻辑运算符的用法差异求助
为什么逻辑或(||)在这里无法正常工作?
这问题其实是逻辑运算符的常见误区,咱们一步步拆解清楚:
先看能正常运行的代码
while ((choice != "Wizard") && (choice != "Knight"))
这个循环的逻辑是:当choice既不是"Wizard",也不是"Knight"的时候,循环继续执行。
逻辑与(&&)的规则是:只有所有条件都为true时,整个表达式才为true。所以只要用户输入的不是这两个选项之一,循环就会一直跑;一旦输入了其中一个,两个条件里就会有一个变成false,整个表达式为false,循环就停止了——这正是你想要的“直到用户选对选项才退出”的效果。
再看第一个无法运行的代码
while ((choice != "Wizard") || (choice != "Knight"))
这里用了逻辑或(||),它的规则是:只要有一个条件为true,整个表达式就为true。
咱们代入任何可能的choice值看看:
- 如果
choice是"Wizard":choice != "Knight"是true→ 整个表达式为true,循环继续 - 如果
choice是"Knight":choice != "Wizard"是true→ 整个表达式为true,循环继续 - 如果
choice是其他值:两个条件都是true→ 表达式还是true,循环继续
不管用户输入什么,这个循环永远不会停止,自然无法正常工作。
最后看第二个无法运行的代码
while (choice != "Wizard" || "Knight")
这个属于语法逻辑错误:||运算符的两边必须是布尔值(true/false),但右边的"Knight"是一个字符串。在大多数编程语言里,非空字符串会被自动转换为true,所以这个表达式等价于:
while (choice != "Wizard" || true)
而true和任何值做||运算结果都是true,所以这个循环也是无限循环,完全起不到判断用户输入的作用。
总结一下关键点
- 要判断“一个值既不是A也不是B”,用
&&(逻辑与):value != A && value != B - 不要用
||(逻辑或)来做这种判断,因为一个值不可能同时等于A和B,value != A || value != B永远为true - 逻辑运算符的两边必须是完整的布尔表达式,不能只写一半(比如不能直接写
|| "Knight")
内容的提问来源于stack exchange,提问作者ChowShow
相关产品推荐
相关产品推荐

