我不明白为什么以下逻辑不起作用:
if (cursorCount > 1 && (!"x".equals(componentType) || !"y".equals(componentType))){
message.append("s");
}
因此,如果光标数超过1,我想打印's',但仅当componentType不等于x或y时才打印。
似乎适用于y但不是x有趣的案例。
Confused.com! :)
答案 0 :(得分:5)
尝试
if (cursorCount > 1 && !("x".equals(componentType) || "y".equals(componentType)))
等效地你可以做
if (cursorCount > 1 && !"x".equals(componentType) && !"y".equals(componentType))
这来自deMorgan定律适用于你的逻辑。
我相信这些更接近你对你想要的英语描述。
修改强>
为了消除困惑,让我们分析一下你英文描述的最后部分的逻辑:
...但仅当componentType不等于x或y时。
说明同一事物的另一种方法是“componentType既不是x也不是y”。为了将其转换为代码,我们应该更进一步,并将此条件改为“不是componentType为x或comonentType为y的情况”。最终版本表明正确的布尔公式为
形式!(A || B)
这与原始代码
形式有很大不同!A || !B
请注意,我的最终重写更详细,但额外的措辞使逻辑更清晰。
分析逻辑的另一种方法是查看您提供的代码:
!"x".equals(componentType) || !"y".equals(componentType)
让我们看一些例子:
"x".equals(componentType) is true. This means the negation is false. It also means that
“y”.equals(componentType)`为false,它的否定为真。因此,您的代码评估为true。
"y".equals(componentType) is true. This means the negation is false. It also means that
“x”.equals(componentType)`为false,它的否定为true。因此,您的代码评估为true。
"x".equals(componentType) nor
“y”.equals(componentType)都不为真。这意味着两个否定都是错误的,您的代码评估为false。
请注意,在两种情况下,您的代码的评估结果为真1.和2.这不会提供与您的英语说明相同的结果。
答案 1 :(得分:0)
你有一个'('在你的“x”条件之前不应该存在。然后从整个if
语句的末尾删除其中一个。你应该将那些属于一起的条件包装在“ ()“因为这样读起来很混乱。
if((cursorCount> 1&&!“x”.equals(componentType))||(!“y”.equals(componentType)))
答案 2 :(得分:0)
if ((cursorCount > 1 && !"x".equals(componentType))
|| (cursorCount > 1 && !"y".equals(componentType)))
message.append("s");
或者你可以嵌套它们,如果它更容易
if (cursorCount > 1)
if (componentType!="y" || componentType!="x")
message.append("s");
这样可以更容易理解并减少谬误。