字符串比较(在“do while循环”中使用“or”)java
在我的一生中,我无法理解为什么当“turnOrder”设置为“first”时该代码无限循环。它似乎与“do while”循环中的“or”操作符有关。但我不知道如何正确格式化它字符串比较(在“do while循环”中使用“or”)java,java,Java,在我的一生中,我无法理解为什么当“turnOrder”设置为“first”时该代码无限循环。它似乎与“do while”循环中的“or”操作符有关。但我不知道如何正确格式化它 String turnOrder; do { Scanner to = new Scanner(System.in); turnOrder = to.nextLine(); if ((!"first".equalsIgnoreCase(turnOrder)) || (
String turnOrder;
do {
Scanner to = new Scanner(System.in);
turnOrder = to.nextLine();
if ((!"first".equalsIgnoreCase(turnOrder)) || (!"second".equalsIgnoreCase(turnOrder))) {
System.out.println("Type your answer as 'first' or 'second.' Without the punctuation.");
} else {}
} while ((!"first".equalsIgnoreCase(turnOrder)) || (!"second".equalsIgnoreCase(turnOrder)));
while((!“first.equalsIgnoreCase(turnOrder))| |(!“second.equalsIgnoreCase(turnOrder)))
此语句将始终为真,直到您得出一个同时等于SignoreCase-s“first”和“second”的turnOrder
值。祝你好运!也许你的意思是
while (
!(
"first".equalsIgnoreCase(turnOrder) ||
"second".equalsIgnoreCase(turnOrder)
)
)
当您键入“first”时,它将返回false !“第一”。相等信号情况(turnOrder),但 它的结果是真的 !“第二个”。相等信号情况(交订单))
false或true=true,因此它将继续循环您应该始终将逻辑操作简化为最简单的形式 “(!“first”.equalsIgnoreCase(turnOrder))| |(!“second”.equalsIgnoreCase(turnOrder))” 可以使用De Morgan定律简化 !!(“第一”等信号案例(移交订单)和“第二”等信号案例(移交订单))
当然,turnOrder不能同时是“第一”和“第二”。它将始终计算为true,因此while循环将无限期地循环。嗯……它不等于signorecase
“second”
。我认为使用and“或”运算符时,其中一个状态可能是false,表达式作为一个整体是真实的。您应该始终将逻辑运算简化为最简单的形式。如果其中一个操作数是true
,则整个表达式是true
。如果表达式为true
,则执行if
语句的哪个部分?这就是发生的情况。turnOrder为“第一”,因此为“第二”。equalsIgnoreCase(turnOrder)
为假,因此!“second”.equalsIgnoreCase(turnOrder)
为真。所以整个或表达式都是真的,循环一直在循环。是的,这确实是一个有趣的语句。然而,即使你采取更干净的方法,它也会不断循环。哦,我明白你现在想做什么。你试图循环直到你得到“第一”或“第二”,而不是直到你得到不同的东西。哎呀!我会根据你的实际意图调整我的答案。非常感谢!不幸的是,我可以看出“or”操作符在这里没有帮助。你有我可能忽略的紧凑解决方案吗?你希望程序做什么?代码应该循环,直到“turnOrder”是“first”或“second”,如果是其他代码,则继续循环。使用&&而不是| |似乎解决了这个问题。谢谢。好的,“或”接线员不在这里工作。非常感谢。