功能我如何同时使用&和|

时间:2013-10-04 14:19:08

标签: while-loop boolean-logic boolean-expression

我是一个总菜鸟,所以当我解释简单的东西时,并不是因为我迟钝了,只是因为我想知道我是错误还是错。

我最初有2个变量,x1y1。我把它们放在while ()这样的

while ( y1<0 || y1>500 || x1<0 || x1>500)

我把它读成“当其中一个”事物“成立时,它会执行while函数。

例如,如果y1=601y1>500为真,则其他3为假,但它进入函数,因为只需要1为真。

现在我遇到了问题,我想添加一个名为z的第三个变量。我这样添加:

while(y1<0 || y1>500 || x1<0 || x1>500 && z>51)

我想要做的是仅在z>51为真时运行while函数以及至少一个以上的函数。或者,如果那不可能,我希望它只在z>51为真时运行。我的代码是错误的,因为即使z>51为假,它现在也会永远持续下去。

3 个答案:

答案 0 :(得分:4)

如果我理解你的问题,你想要:

while((y1<0 || y1>500 || x1<0 || x1>500) && z>51)

在布尔逻辑中,(也称为 ^ )的优先级高于(还注意到 v + )。

这意味着:

y1<0 || y1>500 || x1<0 || x1>500 && z>51

相当于

y1<0 || y1>500 || x1<0 || (x1>500 && z>51)

因此,如果这不是您想要的,则需要括号,就像您在数学中使用+*时添加的括号一样。

答案 1 :(得分:0)

这两项检查是分开的。

你不能简单地写y1<0 || 50051 你必须写(y1<0 || y1>50051)

50051始终评估为true,因此我认为它会永远运行

您的上一次请求

while(z1>51 && y1 >0)

答案 2 :(得分:0)

或者你可以先检查z的值并保持循环不变。

if (z > 51) {
  while ( [...])
  [...]
}

这与Maxime的解决方案略有不同,因为它假设进入循环后z的值无关紧要。另一方面,如果您想更新z并将其用作退出循环的条件,请将其保持在while条件下。