我能够从编码网站解决附加的代码。但是,我的答案与网站的答案不同。发布的是代码。
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 )
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 = false,b2 = false,如果条件,则传递前两个 并且除了将x的值增加到> 1之外,将b1设置为true。从那里开始,每个条件都会失败,并将>最终值打印为1。
网站解决方案:
作为实例变量,b1和b2初始化为false。 if测试
在第7行和第9行成功,因此b1设置为true,x为
递增。下一个if成功的测试是在第19行(注意>那个 代码没有测试以查看b2是否为真,它将b2设置为> true) 由于第19行是成功的,因此随后的其他 - 如果(第21行)>将是
跳过.x的最终值是101
我从网站解决方案中无法理解:
"请注意,代码未测试b2是否为true,是否正在设置 b2是真的"。 如何将b2的值设置为" true"没有测试它的状态?
任何建议都非常有帮助!
答案 0 :(得分:2)
第19行是:
else if ( b2 = true )
编码网站可能会试图教你一个常见的编程错误,即。使用作业=
代替比较==
。
代码(如上所述)将true
的值分配给b2
,而不是将b2
的值与true
进行比较。赋值表达式的结果是true
,因此if
将始终成功并且将执行其代码块。无论执行此代码行之前b2
的值是什么,都会发生这种情况。
如果您使用可能的目的,即:
else if ( b2 == true )
然后将进行比较,if
表达式(及其块的执行)将取决于b2
的值。