2 回答

TA贡献1877条经验 获得超6个赞
要直接回答有关 while 循环条件的问题(这两个条件是否等效?):
不,它们不是等效的,但只需要进行很小的更改。以下两个条件在德摩根定律中是等价的。
boolean b1 = (response != '4' && response != '3' && response != '2' && response != '1');
// (note: I corrected what looked like a typo here ^^)
boolean b2 = !(response == '4' || response == '3' || response == '2' || response == '1');
所以基本上你必须!在你的第二个 while 循环条件之前添加一个以使它们等效(假设它确实是第一个中的错字)。
(注意:你仍然需要!在while循环括号内,所以它看起来像while (!(...)))

TA贡献1839条经验 获得超15个赞
那么java运算符优先级击中了你。使用大括号:
while((response=='4')||(response=='3')||(response=='2')||(response=='1'))
解释:
char 类型的文字(如 '1')是整数。现在,java 会根据一些奇怪的原因评估您的代码,例如 "( ... || response) == ..." 并抱怨,因为 "response" 是一个字符而不是布尔值。如果您使用大括号,请确保首先评估单声道,然后“||” 将布尔值作为操作数。我的意见是:在上述情况下,您不应该得到错误 - 但是,只需使用大括号,错误就会消失。
表达式也不等价。您可以通过取消每个单体和整个结构来切换运算符来获得等价物。以下等价于上述或:
while(!((response!='4')&&(response!='3')||(response!='2')&&(response!='1')))
添加回答
举报