我坚持简单的事情,基本上我想验证以下
public class CharTest
{
public static void main(String [] args)
{
char myChar = '(';
if (myChar != '(' | ')' )
{
System.out.println("Fault");
}
System.out.println("No Fault");
}
}
但我一直在
CharTest.java:6:错误:二元运算符'|'的错误操作数类型 if(myChar!='('|')') ^ 第一种类型:布尔值 第二种:char 1错误
我尝试过使用|以及||如何实现我正在寻找的OR功能?
答案 0 :(得分:5)
Java在if
语句中使用defined syntax。具有多个RHS操作数的表达式违反了语法,因此编译器会抱怨。逻辑运算符不是按位运算符,而是由于它提供的short circuit evaluation而优先使用。
双方都带有否定表达式的逻辑OR将始终为真。请改用&&
:
if (myChar != '(' && myChar != ')' )
答案 1 :(得分:4)
可以在boolean|boolean
或number|number
上使用二元运算符。在您的情况下,从!=
have higher priority then |
myChar != '(' | ')'
等于
( myChar!='(' ) | ')'
给你
boolean | character
但即使您将其写为myChar !=( '(' | ')' )
二进制,或者将'(' | ')'
计算为)
,因为
'(' -> 101000
')' -> 101001
OR ------
'('|')'-> 101001 -> `)`
因此(
条件将会丢失。
您可能希望使用基于De Morgan's law的此表单:!(a OR b)==!a AND!b
myChar != '(' & myChar != ')'
甚至是短路and
以提高性能
myChar != '(' && myChar != ')'
这样,如果myChar != '('
将返回false,则整个条件估计为false,因为false
and
anything
始终为false。
答案 2 :(得分:1)
您应该使用以下
if (myChar != '(' && myChar != ')' )
您必须将比较分开并使用逻辑&&
和运算符。
See an example on logical operators
根据De Morgan's law,您必须使用and
运算符来实现您想要的功能。否则它会接受一切。并且将强制您不想要任何一个角色。
答案 3 :(得分:1)
你不能说“不等于这个字符或这个字符”。 Java使您可以单独比较每个字符。
if (myChar != '(' && myChar != ')')
注意你想要&&
,因为(1)“not(A或B)”与“(不是A)和(不是B)”相同,而(2)我们关心布尔值值,而不是位(使&
看起来很奇怪)。
答案 4 :(得分:0)
你应该这样做
(myChar != '(' && myChar!= ')')
|
不是一个逻辑运算符Bitwise inclusive OR
。
按位|运算符执行按位包含OR运算。
答案 5 :(得分:0)
我认为运营商“|”返回true或false,无法根据字符值验证。
以下内容应该有效:
if (!((myChar==')')||(myChar=='(')) ){
System.out.println("Fault");
}