ブール例のリターン予想外の答え

Sakibシェイク:

私は上の指定されたJavaのテストを通過したindiabixブール質問のようなものを行って、そこに-

public class If2 
{
    static boolean b1, b2;
    public static void main(String [] args) 
    {
        int x = 0;
        if ( !b1 ) /* Line 7 */
        {
            if ( !b2 ) /* Line 9 */
            {
                b1 = true;
                x++;
                if ( 5 > 6 ) 
                {
                    x++;
                }
                if ( !b1 ) /* Line 17 */
                    x = x + 10;
                else if ( b2 = true ) /* Line 19 */
                    x = x + 100;
                else if ( b1 | b2 ) /* Line 21 */
                    x = x + 1000;
            }
        }
        System.out.println(x);
    }
}

今explnation氏は述べています-インスタンス変数、B1とB2がfalseに初期化されています。ライン7,9上のテストがある場合に成功したので、b1はtrueに設定され、Xインクリメントされます。テストが成功する場合は、次の(コードはb2が真であるならば、真実であるとB2を設定されて見ることがテストされていないことに注意してください)ライン19です。19行目が成功したので、それ以降は他-場合の(ライン21)はスキップされます。したがって、答えは101と111ではないことになる。しかし、なぜでしょうif ( !b1 )ライン17上で無視されます。それがあることであるif ( !b1 )7行目では、唯一の真とみなされ、後での外観if ( !b1 )ライン17には無視されます。私の理解では、答えは111と101ではないべきであると言います。

彼らは次のとおりでした:

ライン17は、b1すでにtrueそれが設定されているため、trueライン11上ためif ( !b1 )に評価しますfalse

したがってだけelse if ( b2 = true )に評価されるtrue(また、割り当てtrueb2)、及びX 100を追加します。

x 既にその(ライン12)前に一度インクリメントしたので、値101で終わります。

ても111は不可能で出力されたことに注意してくださいif ( !b1 )に評価しtrue、その場合にので、else if ( b2 = true )評価されず、x値11で終わるであろう。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=223109&siteId=1
おすすめ