作者:xeyuxing369 | 来源:互联网 | 2022-12-06 15:53
我正在通过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是否为真,它将b2设置为true).由于第19行成功,因此将跳过随后的else-if(第21行).因此答案是101而不是111.但为什么if ( !b1 )
第17行会被忽略.是不是if ( !b1 )
第7行只被认为是真的,后来if ( !b1 )
第17行的外观被忽略了.我的理解是答案应该是111而不是101.
1> Eran..:
在第17行b1
已经true
,因为它被设置为true
第11行.因此if ( !b1 )
评估为false
.
因此,只有else if ( b2 = true )
被评估以true
(并还分配true
到b2
),并增加了100至x.
x
在此之前已经增加了一次(第12行),因此最终得到值101.
请注意,即使if ( !b1 )
对其进行评估,111也是一个不可能的输出true
,因为在这种情况下else if ( b2 = true )
不会被评估,x
最终会得到值11.