如何获取文本文件并将其转换为Java中的2D数组?

时间:2015-03-12 17:02:36

标签: java arrays

我有一个文本文件,如下:

1 1 1 0
0 0 1 0
0 0 1 0
0 9 1 0

我想阅读此内容并逐行将其转换为2D数组。 首先我使用BufferedReader和FileReader,然后将它们变成一维数组。我想添加我的一维数组以添加到我的2D数组中。这是我的代码:

            BufferedReader br = new BufferedReader (new FileReader ("num.txt"));
            String line;
            char[][] maze = new char[8][8];

            while ((line = br.readLine() ) != null ){

                char[] row = line.toCharArray();
                int x = 0;
                for (int i = 0; i < row.length; i++) {
                maze[x][i] = row[i];

                System.out.print(maze[i]);
                System.out.printf("%n");
                x++;
                }
            }

我正在尝试获取2D数组,因为我稍后会检查坐标。所以我希望我的2D数组的行由我所拥有的文本文件的每一行确定 但我得到的输出如下:

1

  1

    1

      0
0

  0

    1

      0
0

  0 

    1

      0
0

  9

    1

      0

我做错了什么?

3 个答案:

答案 0 :(得分:1)

您应该将System.out.printf("%n"); 放在for循环旁边。 由于它位于for循环内,因此在打印每个字符后会打印一个新行。

应该是,

while ((line = br.readLine() ) != null ){

    char[] row = line.toCharArray();
        int x = 0;
        for (int i = 0; i < row.length; i++) {
        maze[x][i] = row[i];

        System.out.print(maze[i]);
        x++;
        }
        System.out.printf("%n");  //mention this
    }

还有一件事,x增量不会影响输出序列

答案 1 :(得分:0)

一个问题是你在for循环中递增x,并在while循环的每次迭代时将其值重置为0。由于您使用此变量来计算行数,x++实际上属于for循环之外(但仍在while循环中),并且其初始化为0属于while循环开始之前。

此声明System.out.printf("%n");存在类似问题。您正在为for循环的每次迭代打印它,因此您在每个字符之间获得一个新行。与上面的x相同,将此语句移到for循环之外(但仍然在while循环中)。

     int x = 0;
     while ((line = br.readLine() ) != null )
     {
         char[] row = line.toCharArray();
         for (int i = 0; i < row.length; i++) 
         { 
             maze[x][i] = row[i];
             System.out.print(maze[i]);
         }
         System.out.printf("%n");
         x++;
    }

答案 2 :(得分:0)

BufferedReader br = new BufferedReader(newInputStreamReader(System.in));
char[][] arr = new char[4][4];
int i,j;

for (i=0; i<4; i++) {
    String[] str1=br.readLine().split(" ");
    for (j=0; j<4; j++) {
        arr[i][j] = str1[j].charAt(0);
    }
}

for (i=0; i<4; i++) {
    for (j=0; j < 4; j++) {
        System.out.print(arr[i][j]+" ");
    }
    System.out.println();
}