字符串比较(在“d​​o while循环”中使用“或”)java

时间:2016-06-17 21:58:28

标签: java

我不能为我的生活弄清楚为什么当“turnOrder”设置为“first”时这段代码会无限循环。它似乎与“do while循环”中的“或”运算符有关。但我不知道如何正确格式化它。

{{1}}

3 个答案:

答案 0 :(得分:0)

while ((!"first".equalsIgnoreCase(turnOrder)) || (!"second".equalsIgnoreCase(turnOrder)))

这句话永远都是真的,直到你提出一个等于IgnoreCase-s的turnOrder值为"首先"和"第二"同时。祝你好运!也许你的意思是......

while (
    !(
      "first".equalsIgnoreCase(turnOrder) ||
      "second".equalsIgnoreCase(turnOrder)
     )
)

答案 1 :(得分:0)

当你输入“first”时它会循环,它会返回false !“first”.equalsIgnoreCase(turnOrder),但是 它回归真实 ! “第二” .equalsIgnoreCase(turnOrder))

false OR true = true,因此它将继续循环

答案 2 :(得分:0)

您应该始终将逻辑操作简化为最简单的形式。

“((!”first“.equalsIgnoreCase(turnOrder))||(!”second“.equalsIgnoreCase(turnOrder)))”

可以使用De Morgan定律简化

!(“first”.equalsIgnoreCase(turnOrder)&&"“second”.equalsIgnoreCase(turnOrder))

当然,turnOrder不能同时是“第一”和“第二”。它将始终评估为true,因此您的while循环将无限循环。