Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javaprintf复杂性_Java - Fatal编程技术网

javaprintf复杂性

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

要使此代码按预期运行,请使用cmd/terminal而不是IDE。 (否则您将看不到的正确效果\r\n)

当终端中的9在4个空格后到达最右侧位置时,它将旋转并向后移动4个空格,然后继续移动。但是,当它在一个完整循环后到达起始点时,第二个空间上还有一个9未被\r\n清除。这可能是什么原因造成的

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);