javaprintf复杂性
要使此代码按预期运行,请使用cmd/terminal而不是IDE。 (否则您将看不到的正确效果\r\n) 当终端中的9在4个空格后到达最右侧位置时,它将旋转并向后移动4个空格,然后继续移动。但是,当它在一个完整循环后到达起始点时,第二个空间上还有一个9未被\r\n清除。这可能是什么原因造成的javaprintf复杂性,java,Java,要使此代码按预期运行,请使用cmd/terminal而不是IDE。 (否则您将看不到的正确效果\r\n) 当终端中的9在4个空格后到达最右侧位置时,它将旋转并向后移动4个空格,然后继续移动。但是,当它在一个完整循环后到达起始点时,第二个空间上还有一个9未被\r\n清除。这可能是什么原因造成的 public class Core { public static void main(String[] args) throws InterruptedException { i
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;
}
}
}
}
}
解释你为什么会得到这样的结果 基本上,在您的循环中,您正在更改放置回车符的位置\r\n 循环完成后,返回i=1。您将要执行回车操作的字符数之后,您的值将发生变化
1 -> _9\r
2 -> __9\r
3 -> ___9\r
4 -> ____9 \r
x3 -> ___9 \r
x2 -> __9 \r
x1 -> _9\r
因此,最后一条语句没有清除x2处的9
if中需要更改(dir==true)
或者最好使用
System.out.print(" \r" ); // preferable
您还可以从条件循环中删除sysout\r,并在线程睡眠之前使用它
System.out.print(" \r" );
Thread.sleep(1000);
我在这里看不到问题或问题(除了家庭作业问题)。在调试器/IDE中运行它,观察所有变量和输出窗口,以确定发生了什么。或者,只需在纸上(或者在你的头脑中,它并不太复杂)一步一步地完成它。问题是,在返回段上\r没有清除每9个。我无法找到导致这种情况的原因,我也在eclipse中编写了代码,无法找到错误。(由于某种原因,代码在eclipse中并没有按预期运行,因为它跳过了一行,但在终端中,所有输出都发生在一行上)代码上的两个无关注释:您有
if(dir==true){…}或者if(dir==false){…}
既然dir是一个布尔值,它只能是true或false,那么你的if..else可以是if(dir==true){…}else/*dir必须是false*/{…}另外,不要测试某个布尔值==true
只要测试某个布尔值
:if(dir){…}else{…}这很混乱,因为“dir”(dir方向?)没有告诉你太多:dir==true`是什么意思?如果它表示“向右移动”,而false表示“向左移动”,则将dir
重命名为movingRight
<代码>如果(向右移动){…}否则{/*向左移动*/}
我也会按照斯蒂芬的建议去做@希思。显然,您需要改进您的编程逻辑。在编程时,更好的命名总是有帮助的。虽然我喜欢\r或回车的用法谢谢您的反馈,但我现在使用您的第二种方法,现在我明白了我最初的错误所在。非常感谢。
System.out.print(" \r" );
Thread.sleep(1000);