为什么这个循环工作

时间:2016-03-15 00:38:33

标签: java loops

我有这段代码:

int k;
for (k=0; k>-3; k=-2;); {
System.out.println(k);
}

输出为负四。我不明白为什么这个代码仍然运行,即使在for循环中的语句之后有一个半冒号。

6 个答案:

答案 0 :(得分:4)

正如其他人在评论中指出的那样,在循环问题之上存在一些问题。首先,第三个分号是语法错误。其次,它应该是k-=2而不是k=-2,否则循环将永远不会结束。

清除后,此代码相当于:

int k;
for (k=0; k>-3; k-=2);

{
  System.out.println(k);
}

与以下内容相同:

int k;
for (k=0; k>-3; k-=2);

System.out.println(k);

与以下内容相同:

int k;
for (k=0; k>-3; k-=2) {
}

System.out.println(k);

在for循环后使用分号,你要求一个什么都不做的for循环。之后System.out.println(k)左右的括号只是普通括号。即使没有for循环,您也可以将任何代码放在自己的范围内。

答案 1 :(得分:2)

您的代码没有按照您的说法执行操作。真的,尝试运行它。您可能打算输入减去等于(Date Open High Low Close Volume Adj Close 2/9/2016 26.639999 27.690001 26.51 26.82 13919100 26.82 2/8/2016 27.610001 27.969999 26.48 27.049999 24473600 27.049999 2/5/2016 29.059999 29.139999 27.73 27.969999 16077500 27.969999 2/4/2016 27.91 29.23 27.709999 29.15 28517000 29.15 2/3/2016 28.450001 28.610001 26.57 27.68 55527600 27.68 2/2/2016 29.32 30.23 28.129999 29.059999 34022500 29.059999 2/1/2016 29.27 29.790001 28.790001 29.57 12865800 29.57 1/29/2016 29.1 29.51 28.51 29.51 18718300 29.51 1/28/2016 30.59 30.629999 28.6 28.75 15420500 28.75 1/27/2016 29.9 30.530001 29.450001 29.690001 13269900 29.690001 1/26/2016 29.76 30.190001 29.620001 29.98 11422600 29.98 1/25/2016 29.959999 30.389999 29.66 29.780001 23095500 29.780001 )而不是等于 - 减去(-=)。

接下来,在for循环后删除分号。有关此问题的解释,请参阅其他5个答案。

答案 2 :(得分:0)

if-condition后面有;分号。因此,您的条件会立即终止,并且下一个以{}分隔的块将在100%的时间内执行。

更改此

for (k=0; k>-3; k=-2;);

到此

for (k=0; k>-3; k=-2;)

答案 3 :(得分:0)

循环实际上并没有运行。嗯,确实如此,但不是代码中的循环。以下是发生的事情:

int k;
for(k=0; k>-3; k-=2;); // <-- this line is what is repeated
  • 循环1:k = 0,大于-3。 Loop什么都不做。
  • 循环2:k = -2,大于-3。 Loop什么都不做。
  • 循环3:k = -4且不大于-3,因此退出。

接下来,它会点击System.out.println语句,该语句将打印k( - 4)。

答案 4 :(得分:0)

你怀疑,循环体是空的。它运行完成,有两个完整的迭代(0,-2)。之后,k的值为-4,因此循环退出。然后,你有一个只能执行一次的匿名块,就像任何正常的语句一样。该块包含你的println,它显示循环后的k值,这是你的负值。

答案 5 :(得分:0)

您的代码可以重写为

int k;
for (k=0; k>-3; k=-2;)
{
 // do nothing
}
System.out.println(k);

但可能你想得到这样的东西:

int k;
for (k=0; k>-3; k-=2) {

    System.out.println(k);
}

;之前没有{

在djechlin的评论之后

编辑:好抓!