for循环评估错误

0 java evaluation loops

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

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 + "|");
Run Code Online (Sandbox Code Playgroud)

应该屈服

Kalle's Numbers  |
Run Code Online (Sandbox Code Playgroud)

而是屈服

Kalle's Numbers |
Run Code Online (Sandbox Code Playgroud)

我通过添加变量"rightSpaces"修改了一点代码

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 + "|");
Run Code Online (Sandbox Code Playgroud)

并突然产生正确的输出.为什么是这样?

Tim*_*ers 5

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

你在第二个例子中所做的就是通过评估一次来解决这个问题.