0

コードに次の行があります:-

if (( checker & (1 << val)) ) return false;

ここで、checkerはタイプintで、valはタイプintです。同じものをコンパイルしようとすると、次のようになります:-

q11.java:38: incompatible types
found   : int
required: boolean
        if (( checker & (1 << val)) ) return false;
                      ^
1 error

ただし、コードを次のように変更すると:-

if (( checker & (1 << val)) > 0 ) return false;

その後、ソースをコンパイルすることができます。しかし、コードが最初に機能しなかった理由を理解できません。なぜこれが起こるのかについてのいくつかの指針?

4

3 に答える 3

3

&(if 条件で) 2 つの整数に適用される単項は、別の整数を生成します。ただし、Java ではboolean条件に値が必要です。

于 2012-11-03T12:51:48.280 に答える
2

Java では、条件はブール値、つまり true または false でなければなりません。別のタイプにすることはできません。

val == 31 の場合、テストは次のようになります。

if ((checker & (1 << val)) != 0) return false;

BTW C にはブール型がありません。int 値を使用します。

于 2012-11-03T12:51:11.060 に答える
1

C や C++ とは異なり、 whereifは (他の多くの型の中でも) 整数を取り、ゼロを として解釈しますが、Javaでは、 などfalseにブール式が必要です。は整数を生成する演算であるため、最初の式は の条件では有効ではありません。ifwhile&if

そのような C 条件を Java で書き直す場合!= 0、 ではなくを追加する必要があります> 0。そうしないと、最上位ビットが に設定された整数は1チェックに失敗します。

于 2012-11-03T12:51:02.003 に答える