为了让这段代码按照预期运行,请使用cmd/终端而不是IDE。(否则你将看不到\r的正确效果)
当终端中的9在4个空格后到达最右侧位置时,它会掉头并向后移动4个空格,如此往复。然而,在完成一个完整的周期后,当它到达起点时,第二个空格上仍然有一个未被\r清除的数字9。这可能是什么原因呢?
public class Core {
public static void main(String[] args) throws InterruptedException {
int Array[][] = new int[4][6];
int score;
boolean enemy = true;
boolean dir = true;
// EnemyLine
while (enemy) {
for (int i = 1;;) {
Thread.sleep(1000);
if (i == 1)
dir = true;
else if (i == 4)
dir = false;
if (dir == true) {
int a = Array[0][i] = 9;
System.out.printf("%" + i + "d", a);
i++;
System.out.print("\r");
continue;
} else if (dir == false) {
int a = Array[0][i] = 9;
System.out.printf("%" + i + "d", a);
i--;
System.out.print(" \r");
continue;
}
}
}
}
}
if (dir == true) { ... } else if (dir == false) { ... }
。既然 dir 是一个布尔值,它只能是 true 或 false,所以你的 if..else 可以这样写:if (dir == true) { ... } else /*dir 必须是 false*/ { ... }
此外,不要测试some_boolean == true
,只需测试some_boolean
:if (dir) { ... } else { ... }
。 这很令人困惑,因为 "dir"(方向?)并没有告诉你太多信息:dir == true
是什么意思?如果它表示“向右移动”,而 false 表示“向左移动”,那么将dir
重命名为movingRight
...if (movingRight) { ... } else { /* 向左移动 */ }
- Stephen P