for循环没有完成

时间:2016-01-05 07:58:33

标签: java for-loop

    int length = Math.max(userOne.userName.length(), userTwo.userName.length());
    length = Math.max(length, 5);

    System.out.println("\nCurrent board:");
    for (int i=0; i<3; i++) {
        for (int s=0; s<3; s++) {

            String box = "empty";
            if (boxes[i][s] == 1)
                box = userOne.userName;
            else if (boxes[i][s] == 10)
                box = userTwo.userName;

            if (box.length() < length) {
                for (int j=0; j<(length-box.length()); j++) {
                    box += " ";
                }
            }
            System.out.printf("[%s]",box);
        }
        System.out.print("\n");
    }

第三个循环 for(int j = 0; j&lt;(length-box.length()); j ++)循环错误的时间!!

例如,当它应该循环3次时,它只循环2次;当它应该循环8次时,它只循环4次。我试图打印 j ,似乎循环永远不会完成。

我认为这与Java的同步有关,但我不知道如何解决它!

3 个答案:

答案 0 :(得分:1)

每次迭代时,由于您要添加j,因此增加length-box.length()和减少box,因此循环只会运行您想要的次数的一半(四舍五入)。

while循环在这里更有意义:

while (box.length() < length) {
    box += " ";
}

答案 1 :(得分:0)

增加代码中box的长度 - 使循环条件动态

for (int j=0; j<(length-box.length()); j++) {
  box += " "; //makes box.length() increase!
}

如果您想要定位循环前的box长度,请在循环之前计算它:

int targetLength = length - box.length();
for (int j=0; j< targetLength; j++) {
  box += " "; 
}

答案 2 :(得分:0)

循环期间框长度会发生变化,因此测试会发生变化。

可能你需要在变量中保存初始框长度并使用该变量循环

int innerLength = length - box.length();
for (int j=0; j < innerLength; j++) {
    box += " ";
}