布尔型示例返回意外答案

时间:2018-08-27 08:04:37

标签: java boolean

我正在通过indiabix上的Java测试,布尔值问题类似-

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);
    }
}

现在爆炸说明- 作为实例变量,b1和b2初始化为false。第7和9行的if测试成功,因此b1设置为true,x递增。成功的下一个if测试在第19行(请注意,代码未在测试b2是否为true,而是将b2设置为true)。由于第19行成功,因此将跳过随后的else-if(第21行)。因此答案是101,而不是111。但是为什么第17行的if ( !b1 )会被忽略。是仅将第7行中的if ( !b1 )视为是正确的,而以后在第17行中if ( !b1 )的出现将被忽略。我的理解是答案应该是111,而不是101。

4 个答案:

答案 0 :(得分:7)

第17行的b1已经是true,因为在第11行将其设置为true。因此,if ( !b1 )的求值为false

因此,只有else if ( b2 = true )被评估为true(并且还将true分配给b2),并且将100加到x。

x在此之前已经增加了一次(第12行),因此其最终值为101。

请注意,即使if ( !b1 )评估为true,111也是不可能的输出,因为在这种情况下,else if ( b2 = true )不会被评估,而x最终会值为11。

答案 1 :(得分:1)

这很容易理解。 第11行b1设置为true。x递增1之后,所以x=1。 然后在第17行,如果条件为假!b1=>!true,则添加不执行。

然后从第19行开始,条件变为true,并将100加到x,即x=x+100。结果是101。

答案 2 :(得分:0)

第17行上的if语句确实得到了评​​估。此时,b1为true,因为在第11行中将其分配为true。这意味着!b1的计算结果为false。

由于第17行的if无法执行,否则ifs有机会运行。在这种情况下,b2 = true将始终为true,因为赋值表达式始终为赋值的值。结果,x(现在是1)现在是101,并加上了100。

让我们假设!b1在第17行是正确的,那么else if (b2 = true)将不会运行,并且您将获得11作为输出。

答案 3 :(得分:0)

嗨,这项工作很好,请检查您的条件组合!!!

public class If2 {
    static boolean b1, b2;

    public static void main(String[] args) {
        int x = 0;
        if (!b1) /* Line 7 */
        {
            System.out.println("1"+b1);
            if (!b2) /* Line 9 */
            {   System.out.println("2"+b2);
                b1 = true;
                System.out.println("2.1 b1 is"+b1);
                x++;
                if (5 > 6) {
                    x++;
                }
                System.out.println("3"+b1);
                System.out.println("4"+b2);
                if (!b1) /* Line 17 */  //Vipul:- as    b1 is true this will not invoke         
                x = x + 10;             
                else if (b2 = true) /* Line 19 */ //Vipul:- as  b2 is true this will  invoke    
                    x = x + 100;
                else if (b1 | b2) /* Line 21 */
                    x = x + 1000;
                System.out.println("X"+x);
            }
        }
        System.out.println(x);
    }
}