我最近在Java考试中遇到过这个问题:
以下嵌套循环后sum的值是什么:
int sum = 0;
for (int i=0; i <= 2; i++)
for (int j = 1; j <= i; j++)
sum=sum + i + j;
我输入“0”因为循环不会编译,所以将sum与原始值保持一致。我的问题出错了。她说正确答案是9.这是对的吗?我在BlueJ中尝试了它并且出错了。
在我发布之前,我加倍检查每个角色两次。它与我的试卷完全相同。没有遗漏或删除任何内容。
答案 0 :(得分:1)
为我编译,我得到9. BlueJ可能会给你关于不良缩进的警告,但这些只是警告。
答案 1 :(得分:1)
i j j<=i sum
___________________
0 1 false 0 //sum=sum + i + j; not executed since j <= i is false. loop end, return to first for loop
1 1 true 0+1+1=2
1 2 false 2 //sum=sum + i + j; not executed since j <= i is false. loop end, return to first for loop
2 1 true 2+2+1=5
2 2 true 5+2+2=9
sum
= 9
答案 2 :(得分:1)
首先 - 没有关于该代码的任何内容在语法上是不正确的。
您可以拥有一个没有大括号的for语句,但需要注意的是只有 next 语句作为隐含块的一部分执行。
由于第一个for
语句的下一行是另一个for
语句,所以你实际上是一个嵌套的for循环。
其次,答案本身也是正确的。在i > 0
之前,内部循环不会触发,所以最终结束:
答案 3 :(得分:1)
假设此代码在主方法中,它将起作用。如果你试图编译你写的东西显然会崩溃。
在第一个循环之后因为没有括号,只有第一行在循环后执行,这是另一个循环。编译器将此循环视为仅一行,因此第二个循环的内部内容也将由第一个循环执行,这使得:
0(第二个循环不执行,因为i = 0&lt; j = 1)+ 2(i = 1,j = 1,第二个循环执行一次)+ 7(3 + 4)(i = 2,j = 1,j = 2,第二次循环执行两次)= 9