0

私は単純なものにこだわっています。基本的には、次のことを検証したいと思います

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 != '(' | ')' ) ^ 最初のタイプ: boolean 2番目のタイプ: char 1 エラー

| を使ってみました || と同様に 探している OR 機能を実現するにはどうすればよいですか?

4

6 に答える 6

5

Java には、ステートメントで使用する定義済みの構文があります。if複数の RHS オペランドを含む式を持つと、構文に違反するため、コンパイラはエラーを出します。ここでは、ビットごとの演算子ではなく、短絡評価が提供される論理演算子の方が適しています。

両側に負の式がある論理 OR は、常に真になります。&&代わりに使用してください:

if (myChar != '(' && myChar != ')' )
于 2013-03-05T16:52:32.993 に答える
4

理由

二項演算子はboolean|booleanまたはで使用できますnumber|number。あなたの場合、優先順位が高い
ので!=|

myChar != '(' | ')'

に等しい

( myChar!='(' ) | ')'

あなたに与える

    boolean     | character

myChar !=( '(' | ')' )しかし、このバイナリ ORのように記述したとしても、次のように計算
'(' | ')'され)ます。

'(' ->     101000
')' ->     101001
 OR        ------
'('|')'->  101001 -> `)`

そのため、(状態が失われます。

解決

De Morgan の法則に基づいて、次の形式を使用することをお勧めします: !(a OR b)== !a AND !b

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

またはショートサーキットandでパフォーマンスを向上させる

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

このように false を返す場合は、常に falsemyChar != '('を返すため、条件全体が false と推定されます。
false and anything

于 2013-03-05T16:51:19.773 に答える
1

「この文字またはこの文字と等しくない」とは言えません。Java では、各文字を個別に比較できます。

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

ここで必要なことに注意してください。 &&(1) 「not (A or B)」は「(not A) and (not B)」と同じであり、(2) ビットではなくブール値を気にするためです (&見栄えを良くする)ここがおかしい)。

于 2013-03-05T16:53:54.627 に答える
1

以下を使用する必要があります

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

比較を分離し、論理&&and 演算子を使用する必要があります。

論理演算子の例を見る

ド・モルガンの法則によれば、andやりたいことを達成するには演算子を使用する必要があります。そうでなければ、すべてを受け入れることになります。and は、どちらの文字も必要としないことを強制します。

于 2013-03-05T16:51:58.557 に答える
0

演算子「|」だと思います true または false を返しますが、これは文字値に対して検証できません。

以下はうまくいくはずです:

if (!((myChar==')')||(myChar=='(')) ){
    System.out.println("Fault");
}
于 2013-03-05T17:36:15.267 に答える
0

こうすればいい

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

|は論理演算子ではありませんBitwise inclusive OR

ビットごとの | 演算子は、ビット単位の包含 OR 演算を実行します。

于 2013-03-05T16:52:39.330 に答える