for循环评估错误

时间:2015-07-02 12:44:11

标签: java loops evaluation

我今天遇到这个问题而且我不确定是什么原因造成的。以下代码:

int totWidth = 19;
String header = "Kalle's Numbers";
if (totWidth > header.length()) {
    for (int j = 0; j < totWidth / 2 - header.length() / 2; j++) {
        header += " ";
    }
}
System.out.println(header + "|");

应该产生

Kalle's Numbers  |

而是产生

Kalle's Numbers |

我通过添加变量&#34; rightSpaces&#34;

来修改代码。
int totWidth = 19;
String header = "Kalle's Numbers";
if (totWidth > header.length()) {
    int rightSpaces = totWidth / 2 - header.length() / 2;
    for (int j = 0; j < rightSpaces; j++) {
        header += " ";
    }
}
System.out.println(header + "|");

然后突然产生正确的输出。这是为什么?

1 个答案:

答案 0 :(得分:5)

因为在遍历for循环时,您通过添加空格来更改header的长度。因此,循环的延续条件中的header.length() / 2每次都可能具有不同的值。

您在第二个示例中所执行的操作通过对其进行一次评估来解决此问题。