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的同步有关,但我不知道如何解决它!
答案 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 += " ";
}