Java - 控制台中的Printed 2D Array变形

时间:2017-02-01 17:28:34

标签: java arrays eclipse

我有一个非常奇怪的问题......今天早上我将用于测试目的的2D Dungeon打印到Eclipse - Console中。一切都很好。它看起来像这样(只有更大)

0,0,0,1,1,1,1,1,1,0,0,0
0,0,0,1,1,1,1,1,1,0,0,0
0,0,0,1,1,1,1,1,1,0,0,0
0,0,0,1,1,1,1,1,1,0,0,0
0,0,0,1,1,1,1,1,1,0,0,0
0,0,0,1,1,1,1,1,1,0,0,0
0,0,0,1,1,1,1,1,1,0,0,0
0,0,0,1,1,1,1,1,1,0,0,0
0,0,0,1,1,1,1,1,1,0,0,0

所以,但我有2个版本的2D阵列,一个有路径,一个有无法到达的房间和法线贴图。所以我一个接一个地打印出来。结果很奇怪。

Outprinted

它似乎完全变形......但我不明白为什么。我只是像这样打印所有3个:

    System.out.println("Dungeon begins : ");

    for(int y = 0; y < dungeon.length; y++){

        for(int x = 0 ; x < dungeon[0].length; x++){

            System.err.print(dungeon[y][x]);

        }

        System.err.println("");

    }

    System.out.println("Dungeon finished : ");

通常不应该发生。我的2D数组也只包含Chars:0,5。但控制台日志只显示1和0 ...这只发生在我打印所有3个接一个。即使每个打印之间的暂停也没有帮助,我尝试使用Thread.Sleep();.我重启IDE和我的电脑几次......没有帮助。

有谁知道为什么会这样?我目前正在使用Eclipse-Luna ...

1 个答案:

答案 0 :(得分:0)

如果您System.err.print同时使用不同的线程,则可能会发生这种情况。请更改您的代码,以便首先打印到新的StringBuffer,然后立即打印整个缓冲区。

public class Dungeon
{
    public static final String LINEBREAK = System.getProperty("line.separator");

    public static void main(final String[] args)
    {
        final int[][] dungeon = new int[10][10];
        System.out.println("Dungeon begins : ");
        final StringBuffer buffer = new StringBuffer();
        for (int y = 0; y < dungeon.length; y++)
        {

            for (int x = 0; x < dungeon[0].length; x++)
            {
                buffer.append(dungeon[y][x]);
            }
            buffer.append(LINEBREAK);
        }

        System.err.println(buffer.toString());
        System.out.println("Dungeon finished : ");
    }
}