java中的二进制或运算符比较字符

java中的二进制或运算符比较字符,java,logic,Java,Logic,我被一些简单的东西卡住了,基本上我想验证以下内容 public class CharTest { public static void main(String [] args) { char myChar = '('; if (myChar != '(' | ')' ) { System.out.println("Fault"); } System.out.println("N

我被一些简单的东西卡住了,基本上我想验证以下内容

public class CharTest
{
    public static void main(String [] args)
    {
        char myChar = '(';
        if (myChar != '(' | ')' )
        {
            System.out.println("Fault");
        }
        System.out.println("No Fault");
    }
}
但我一直在

java:6:错误:二进制运算符“|”的操作数类型错误 如果(myChar!='('|')') ^ 第一类:布尔型 第二类:字符 1错误

我已经尝试过使用|以及| |如何实现我正在寻找的或功能?

原因 二进制运算符可用于
boolean | boolean
number | number
。在你的情况下

等于

( myChar!='(' ) | ')'
这给了你

    boolean     | character
但即使你想这样写
myChar=(“(“|”)
二进制或将
”(“|”)”
计算为
,因为

'(' ->     101000
')' ->     101001
 OR        ------
'('|')'->  101001 -> `)`
因此,
条件将丢失

解决方案 您可能希望根据以下条件使用此表单:!(a或b)=!a和!b

myChar != '(' & myChar != ')' 
甚至短路
,以提高性能

myChar != '(' && myChar != ')'

这样,如果
myChar!=”(“
将返回false),整个条件将被估计为false,因为
false
任何东西都会给出false。

您应该使用以下命令

if (myChar != '(' && myChar != ')' )
您必须分离比较并使用逻辑的
&&
and运算符

根据,您必须使用
运算符来实现您想要的操作。否则它将接受所有操作。and将强制您不需要这两个字符中的任何一个。

Java在
if
语句中使用。具有多个RHS操作数的表达式违反语法,因此编译器complains。由于逻辑运算符提供的特性,这里更倾向于使用逻辑运算符,而不是按位运算符

两边都有否定表达式的逻辑OR将始终为真。请改用
&&

if (myChar != '(' && myChar != ')' )

你应该这样做

(myChar != '(' && myChar!= ')')
|
不是逻辑运算符,而是一个
位包含或

按位|运算符执行按位包含或运算。

不能说“不等于此字符或此字符”。Java让您分别对每个字符进行比较

if (myChar != '(' && myChar != ')')
注意这里需要
&
,因为(1)“not(A或B)”与“(not A)和(not B)”相同,(2)我们关心的是布尔值,而不是位(使
&
在这里看起来很奇怪)。

我认为运算符“|”返回true或false,这无法根据字符值进行验证

以下方面应起作用:

if (!((myChar==')')||(myChar=='(')) ){
    System.out.println("Fault");
}

15分钟前有这样一个问题,请使用搜索功能。如果(myChar!='(“| | myChar!=')@KanagaveluSugumar这将产生错误的行为。@HugoDozois是的。但我给出了如何使用管道(或条件)的示例…这不会产生好结果behavior@HugoDozois:你想说什么?这将匹配任何带有
的表达式(
。这是不需要的。你必须在语句之间放置一个逻辑and
&
。这在逻辑上是正确的!@HugoDozois:谢谢你的建议:)
if (!((myChar==')')||(myChar=='(')) ){
    System.out.println("Fault");
}