尝试
if (cursorCount > 1 && !("x".equals(componentType) || "y".equals(componentType)))
等效地你可以做
if (cursorCount > 1 && !"x".equals(componentType) && !"y".equals(componentType))
这来自将德摩根定律应用于您的逻辑。
我相信这些更符合您对您想要的东西的英文描述。
编辑:
为了消除混淆,让我们分析一下您英文描述的最后一部分的逻辑:
...但仅当 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)` 是假的,它的否定是真的。因此,您的代码计算结果为 true。
"y".equals(componentType) is true. This means the negation is false. It also means that
"x".equals(componentType)` 是假的,它的否定是真的。因此,您的代码计算结果为 true。
"x".equals(componentType) nor
"y".equals(componentType) 都不是真的。这意味着两个否定都是错误的,并且您的代码评估为错误。
请注意,您的代码在 1. 和 2 两种情况下都为 true。这与您的英文描述所期望的结果不同。