我的老师在这个考试代码上犯了错误吗? (Java,For循环)

时间:2013-12-05 03:32:48

标签: java for-loop

我最近在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中尝试了它并且出错了。

在我发布之前,我加倍检查每个角色两次。它与我的试卷完全相同。没有遗漏或删除任何内容。

4 个答案:

答案 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之前,内部循环不会触发,所以最终结束:

  1. i = 0,j = 1,sum = 0
  2. i = 1,j = 1,sum = 2
  3. i = 2,j = 1,sum = 5
    1. i = 2,j = 2,sum = 9

答案 3 :(得分:1)

假设此代码在主方法中,它将起作用。如果你试图编译你写的东西显然会崩溃。

在第一个循环之后因为没有括号,只有第一行在循环后执行,这是另一个循环。编译器将此循环视为仅一行,因此第二个循环的内部内容也将由第一个循环执行,这使得:

0(第二个循环不执行,因为i = 0&lt; j = 1)+ 2(i = 1,j = 1,第二个循环执行一次)+ 7(3 + 4)(i = 2,j = 1,j = 2,第二次循环执行两次)= 9