我正在通过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。
答案 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);
}
}